为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

牛魔王的故事 2019-08-13 16:58:55
SQLSTATE [HY093]:参数号无效:未定// 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)在执行之前就被调用了?这里发生了什么?
查看完整描述

2 回答

?
MM们

TA贡献1886条经验 获得超2个赞

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

不幸的是,这个错误不能描述与同一问题相关的一系列不同问题 - 绑定错误。它也没有指定错误的位置,因此您的问题不一定在执行中,而是已经“准备好”的sql语句。

这些是可能的错误及其解决方案:

  1. 参数不匹配 - 字段数与已绑定的参数不匹配。注意阵列中的数组。要仔细检查 - 使用var_dump($ var)。“ print_r ”不一定显示数组中的索引是否是另一个数组(如果数组中有一个值),而var_dump将会显示。

  2. 您尝试使用相同的绑定值进行绑定,例如:“:hash”和“:hash”。每个索引都必须是唯一的,即使逻辑上对两个不同的部分使用相同也是有意义的,即使它是相同的值。(它类似于常量,但更像是占位符)

  3. 如果您在语句中绑定了多个值(通常是“INSERT”的情况),则需要bindParam然后将bindValue绑定到参数。此处的过程是将参数绑定到字段,然后将值绑定到参数。

// Code snippet

$column_names = array();

$stmt->bindParam(':'.$i, $column_names[$i], $param_type);

$stmt->bindValue(':'.$i, $values[$i], $param_type);

$i++;

//.....

  1. 将值绑定到column_names或table_names时,您可以使用``但不是必需的,但请确保一致。

  2. “单引号”中的任何值始终被视为字符串,不会被读取为要绑定的列/表名或占位符。


查看完整回答
反对 回复 2019-08-13
  • 2 回答
  • 0 关注
  • 830 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信