我有一个使用php的mysql select查询语句,
"timestamp": "2015-01-02T09:00:00+00"
我尝试过:
"timestamp":"2018-06-25T15:25:35+00"
"timestamp":"2018-06-25T15:25:35z"
"timestamp":"2018-06-25 15:25:35"
错误输出
致命错误:未捕获的PDOException:SQLSTATE [HY093]:无效的参数 number:绑定变量的数量与中的令牌数量不匹配
$rrt = implode(',',array_fill(0,count($ees),'?'));
$rrr = implode(',',array_fill(0,count($array),'?'));
$select = $con ->prepare("SELECT name from table WHERE name NOT IN ($array) AND ageNOT IN ($rrt) GROUP BY name ");
错误输出
致命错误:未捕获的PDOException:SQLSTATE [HY093]:无效的参数 number:绑定变量的数量与中的令牌数量不匹配
$select = $con ->prepare("SELECT name from table WHERE name NOT IN ($rrr) AND age NOT IN ($rrt) GROUP BY name ");
$select->($array);
这个给出了一些结果,但是没有我想要的; 我想使用这样的查询:
$select = $con ->prepare("SELECT name from table WHERE name NOT IN ($array) AND age NOT IN ($rrt) GROUP BY name ");
$select -> bindParam(1,$array);
$select -> bindParam(2,$ees);
$select -> execute();
但是我不想得到参数绑定错误的数量,请帮忙!预先感谢。
答案 0 :(得分:1)
这应该有效:
$rrr = implode(',',array_fill(0,count($array),'?'));
$rrt = implode(',',array_fill(0,count($ees),'?'));
$select = $con ->prepare("SELECT name from table WHERE name NOT IN ($rrr) AND age NOT IN ($rrt) GROUP BY name ");
$index = 1;
foreach($array as $key => $value) {
$select -> bindParam($index++,$array[$key]);
}
foreach($ees as $key => $value) {
$select -> bindParam($index++,$ees[$key]);
}
$select -> execute();
请注意bindParam需要变量引用。
答案 1 :(得分:0)
假设您正在使用PDO,只有两种方法可以将值传递给参数化查询:
在前一种情况下,您可以根据问号的位置(对于?样式参数)进行绑定,也可以根据参数的名称(对于命名参数)进行绑定
在任何一种情况下,您只能将一个变量绑定到一个参数。您不能使用bindParam绑定整个数组(尽管您可以绑定数组中的单个条目)。
要将数组传递到execute,它必须是索引数组,且条目数与问号相同(用于?样式),或者它必须是键与命名占位符匹配的数组(对于命名参数)样式)。同样,每个占位符只能绑定一个条目。
您似乎想做的是将两个数组绑定到同一查询。你不能那样做。您确实有选择。