我的代码是:
.....
.....
$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)...
答案 0 :(得分:4)
绑定参数时,需要在参数名称中指定:
:
$stmt->bindParam(':' . $search_field, $search_val);
您收到错误,因为缺少此错误并且代码回退到期望整数值来指示参数位置(就像您使用?
- 样式参数一样)。
请注意文档中PDOStatement::bindParam()
的第一个参数的说明。
参数
参数标识符。对于使用命名占位符的预准备语句,这将是以下形式的参数名称:name。为一个 准备好使用问号占位符的声明,这将是 1参数的索引位置。