当前位置: 首页 > 面试题库 >

SQLSTATE [HY093]:参数号无效:参数未定义

曾嘉瑞
2023-03-14
问题内容
// BUILD VALUES
$count = count($matches);
for($i = 0; $i < $count; ++$i) {
    $values[] = '(?)';
}
// INSERT INTO DATABASE
$q = $this -> dbc -> prepare("INSERT INTO hashes (hash) VALUES " . implode(', ', $values) . " ON DUPLICATE KEY UPDATE hash = hash");
$q -> execute($matches);

上面的代码因以下错误而失败

SQLSTATE [HY093]:参数号无效:参数未定义

虽然什么时候count($matches) == count($values)执行

这里发生了什么?


问题答案:

您收到的此错误:

SQLSTATE [HY093]:参数号无效:参数未定义

是因为$values&中的元素数$matches不相同或$matches包含1个以上的元素。

如果$matches包含多个元素,则插入操作将失败,因为query(hash)中仅引用了1个列名

如果$values$matches不包含相同数量的元素,则由于查询期望x参数,但是插入正在接收y data,因此插入也会失败$matches

我相信您还需要确保列哈希也具有唯一索引。

在这里尝试代码:

<?php

/*** mysql hostname ***/
$hostname = 'localhost';

/*** mysql username ***/
$username = 'root';

/*** mysql password ***/
$password = '';

try {
    $dbh = new PDO("mysql:host=$hostname;dbname=test", $username, $password);
    /*** echo a message saying we have connected ***/
    echo 'Connected to database';
    }
catch(PDOException $e)
    {
    echo $e->getMessage();
    }


$matches = array('1');
$count = count($matches);
for($i = 0; $i < $count; ++$i) {
    $values[] = '?';
}

// INSERT INTO DATABASE
$sql = "INSERT INTO hashes (hash) VALUES (" . implode(', ', $values) . ") ON DUPLICATE KEY UPDATE hash='hash'";
$stmt = $dbh->prepare($sql);
$data = $stmt->execute($matches);

//Error reporting if something went wrong...
var_dump($dbh->errorInfo());

?>

您将需要对其稍作调整。

我使用的表结构在这里:

CREATE TABLE IF NOT EXISTS `hashes` (
  `hashid` int(11) NOT NULL AUTO_INCREMENT,
  `hash` varchar(250) NOT NULL,
  PRIMARY KEY (`hashid`),
  UNIQUE KEY `hash1` (`hash`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

代码在我的XAMPP服务器上运行,该服务器使用PHP 5.3.8和MySQL 5.5.16。

我希望这有帮助。



 类似资料:
  • 我已经和这个打了几天了。。。 刚连接到数据库- 叫来- 但我只是 PHP致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[HY093]:无效参数编号:未定义参数” 在执行行上。 如果它是相关的,表是这样定义的: 我对PDO还比较陌生,尤其是BLOB,所以我可能在做一些很明显很愚蠢的事情,但它现在正在逃避我! 谢谢 编辑:我注意到prepare中对引号:comment的引用

  • 问题内容: 尝试运行以下功能时,出现错误“ SQLSTATE [HY093]:无效的参数号”: 我觉得这很简单,我只是没有抓住。有任何想法吗? 问题答案: 尝试: 和 文档摘录(http://php.net/manual/zh/pdo.prepare.php): 调用PDOStatement :: execute()时,对于要传递给语句的每个值,必须包含一个唯一的参数标记。您不能在准备好的语句中两

  • 致命错误:C:\xampp\htdocs\otakutangerang_admin\C_action.php:33堆栈跟踪:#0 C:\xampp\htdocs\otakutangerang_admin\C_action.php(33):PDO语句中出现未捕获的异常“PDOException”,并显示消息“SQLSTATE[HY093]:参数编号无效”-

  • 问题内容: $ fields是一个数组,打印后得到的值如下: 我从数据类中调用update函数,如下所示: 但是我得到了错误: 警告:PDOStatement :: execute():SQLSTATE [HY093]:无效的参数编号:在…文件文本中未定义参数 我检查了其他几个类似的线程,但我想这里缺少一些基本概念,因为我仍然找不到答案。据我所知,数组中有7个和7个项目,如果我定义了所有值,则可以

  • 问题内容: 更新 列出值时,我犯了一个小错误。我应该输入“:username”而不是“:alias”。我想这个问题的答案是谁想要的自由统治?还是删除问题? 原版的 我一直在使用Yii的活动记录模式。现在,我的项目需要为一个小事务访问另一个数据库。我以为Yii的DAO会很好。但是,我收到了一个神秘的错误。 CDbCommand无法执行SQL语句:SQLSTATE [HY093]:无效的参数编号:参数

  • 问题内容: 关闭。 此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow 的主题。 6年前关闭。 我收到SQLSTATE [HY093]错误:无效的参数编号:绑定变量的数量与以下comments.php中第102行的令牌数量不匹配: 问题答案: 您没有在此处绑定所有绑定 您已经声明了一个名为:numRows的绑定,但实际上从未绑定任何东西