我知道以前曾经问过这个问题,但是对于我的生活,我找不到我错的地方。我的代码如下。
$backa = array("1", "7", "8", "9", "12");
$backaa = implode(",", $backa);
/* code to create connection object $wkHook */
$getOpt=$wkHook->prepare("select movementId, movementName from Movement where movementId IN ($backaa) order by movementName asc");
$getOpt->execute();
$getOpt->store_result($id, $name);
每次运行此操作时,根据我使用$ backaa变量的方式,我会得到两个错误之一。通常情况下,我会调用非对象错误,指示$ getOpt不是正确的Mysql查询。我已尝试过$ backaa变量的每种引用,包围等方式,但它对我不起作用。我错过了什么明显的事情?
答案 0 :(得分:4)
你不是只错过)
吗?它应该是
$getOpt=$wkHook->prepare("select movementId, movementName from Movement where movementId IN ($backaa0) order by movementName asc");
答案 1 :(得分:3)
正如已经指出的那样,您的查询是无效的SQL。 阅读错误消息:他们随时为您提供帮助。
无论如何,如果您将参数值注入到纯SQL中,那么您将错过准备语句的全部内容。
我使用过的DB库都没有支持扩展到多个参数的参数。通常,您需要从数组生成n个不同的参数并将它们全部绑定,以便最终得到:
$getOpt=$wkHook->prepare("select movementId, movementName
from Movement
where movementId IN (?, ?, ?, ?)
order by movementName asc");
使用array_keys()和implode()的组合可以轻松实现自动化。
答案 2 :(得分:2)
查询中的var是$ backaa0,代码中的$是$ backaa。你错过了一个“)”。
$backaa = implode(",", $backa);
/* code to create connection object $wkHook */
$getOpt=$wkHook->prepare("select movementId, movementName from Movement where movementId IN ($backaa0 order by movementName asc");
答案 3 :(得分:2)
问题是内爆,试试:
$backaa = "'". implode("', '", $backa) ."'";
答案 4 :(得分:0)
如果你绑定$ backaa,你实际上是在说:
...where movementId IN ('"1", "7", "8", "9", "12"') order by...
看,发生了什么?它被视为1个参数,即由数字,逗号和引号组成的字符串。所以我不明白这是怎么回事。
至于将它绑定为一个数组,这更有意义,但听起来似乎并不适合你,所以我不知道。
我认为这样可行:
...where movementId IN (".$backaa.") order by...
但是你并没有真正绑定任何东西,所以你不妨打破你的real_escape_string()。我怀疑这可能是你之前做过的。
答案 5 :(得分:0)
如果有人正在寻找,我的实施是这样的。
$ list = $ _POST ['list'];
// list是3,2,4,5; commma分隔值
$ data = array($ list);
$ data = implode(“,”,$ data);
$ sql =“SELECT phone_number
FROM pinvalidation
WHERE phone_number
IN($ data);”;
$ res = mysql_query($ sql);