Mysql IN子句,php数组

时间:2010-03-25 17:05:29

标签: php mysql arrays

我知道以前曾经问过这个问题,但是对于我的生活,我找不到我错的地方。我的代码如下。

$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变量的每种引用,包围等方式,但它对我不起作用。我错过了什么明显的事情?

6 个答案:

答案 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);