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

时间:2014-03-20 20:06:02

标签: php mysql exception pdo

我的代码是:

.....
.....

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

....
....

其中$search_field = 'reg_user_linked', $search_val = 'aa@gmail.com'

执行语句时会发生此错误,我无法找出原因:

  

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

有人可以帮忙吗?


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

1 个答案:

答案 0 :(得分:4)

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

$stmt->bindParam(':' . $search_field, $search_val);

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

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

  

参数

     

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