PHP PDOException -- 参数编号无效:列/参数从 1 开始

she*_*njw 3 php mysql pdo exception

我的代码是:

.....
.....

$sql = 'SELECT '.$return_fields.' FROM '.$table.' WHERE '.$search_field.'=:'.$search_field;
$stmt = $conn->prepare($sql);
$stmt->bindParam($search_field, $search_val);
$stmt->execute();

....
....
Run Code Online (Sandbox Code Playgroud)

在哪里$search_field = 'reg_user_linked', $search_val = 'aa@gmail.com'

执行该语句时出现此错误,我无法弄清楚原因:

参数编号无效:列/参数从 1 开始

有人可以帮忙吗?


经过几个小时的尝试,我发现这个错误只发生在我处于调试模式时。如果我运行代码并打印结果,它就会起作用......有谁知道为什么会发生这种情况?(我的IDE是NetBeans 7.2,调试工具是xdebug)...

Mik*_*ant 6

绑定参数时需要:在参数名称中指定:

$stmt->bindParam(':' . $search_field, $search_val);
Run Code Online (Sandbox Code Playgroud)

您会收到错误,因为缺少此参数,并且代码回退到期望整数值来指示参数位置(就像您使用?-style 参数一样)。

PDOStatement::bindParam()请注意文档中第一个参数的描述。

范围

参数标识符。对于使用命名占位符的准备语句,这将是以下形式的参数名称:名称。对于使用问号占位符的准备好的语句,这将是参数的 1 索引位置。

  • @YourCommonSense 所有答案都不能解决问题。这是 StackOverflow 所期望的答案。我指出了一个我认为他的代码中存在问题的具体项目,我解释了为什么我认为这是一个问题,并提供了一个解决方案。 (2认同)