【发布时间】:2016-04-08 19:47:03
【问题描述】:
我希望检查表中数组的存储值是否出现。像这样的数组:
$myarray=array("122","123","124","125");
我不想在查询中内爆数组,因为它不安全。
SELECT ledger FROM mytable WHERE ledger IN('".implode("','",$myarray)."')
我想为安全准备好声明。我尝试在 for 循环中运行查询,但失败了。
$not = sizeof($myarray);
for ($i = 0; $i < $not; $i++) {
$qc = 'SELECT ledger FROM mytable WHERE ledger = ?';
$st = $mysqli->prepare($qc);
$st->bind_param("i", $myarray[$i]);
$st->execute();
$ro = $st->num_rows;
if ($ro > 0){
echo "number exists";
break;
}
}
这会引发“在非对象上调用成员函数 bind_param()”错误。 我确信有更好的方法来做到这一点。有什么建议吗?
【问题讨论】:
-
chris85,我正在查看表中是否存在数组中的任何值。如果是,是哪一个。
-
你试过带单引号的 bind_param,比如
$st->bind_param('i', $myarray[$i]); -
不要在循环内使用
$qc = 'SELECT ...';和$st = $mysqli->prepare($qc);,因为它违背了使用->prepare()的部分目的。只在循环内执行->bind_param()、->execute()等。 -
@sean,我按照你的建议尝试了。表中有与数组值匹配的记录,但 num_rows 输出 0。知道为什么吗?