猿问

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

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)在执行之前就被调用了?


这里发生了什么?


牛魔王的故事
浏览 831回答 2
2回答

MM们

SQLSTATE [HY093]:参数号无效:未定义参数不幸的是,这个错误不能描述与同一问题相关的一系列不同问题 - 绑定错误。它也没有指定错误的位置,因此您的问题不一定在执行中,而是已经“准备好”的sql语句。这些是可能的错误及其解决方案:参数不匹配 - 字段数与已绑定的参数不匹配。注意阵列中的数组。要仔细检查 - 使用var_dump($ var)。“&nbsp;print_r&nbsp;”不一定显示数组中的索引是否是另一个数组(如果数组中有一个值),而var_dump将会显示。您尝试使用相同的绑定值进行绑定,例如:“:hash”和“:hash”。每个索引都必须是唯一的,即使逻辑上对两个不同的部分使用相同也是有意义的,即使它是相同的值。(它类似于常量,但更像是占位符)如果您在语句中绑定了多个值(通常是“INSERT”的情况),则需要bindParam然后将bindValue绑定到参数。此处的过程是将参数绑定到字段,然后将值绑定到参数。// Code snippet$column_names = array();$stmt->bindParam(':'.$i, $column_names[$i], $param_type);$stmt->bindValue(':'.$i, $values[$i], $param_type);$i++;//.....将值绑定到column_names或table_names时,您可以使用``但不是必需的,但请确保一致。“单引号”中的任何值始终被视为字符串,不会被读取为要绑定的列/表名或占位符。
随时随地看视频慕课网APP
我要回答