MySql find_in_set()与PHP PDO不一致

时间:2013-02-18 14:56:20

标签: php pdo

关于为什么以下会抛出参数错误的任何想法。我已经看了所有其他的答案,但我正在以与那些解决方案相同的方式接近这个但是这似乎仍然没有用。将应用从adodb切换到pdo。

$possible_keys = implode( ",", $possible_keys_array );

sql snippet

WHERE
FIND_IN_SET(table.key,:possible_keys)

$STH = $DBH->prepare( $sql );

$STH->execute( array( $possible_keys ) );

$STH->setFetchMode( PDO::FETCH_ASSOC );

我只是快速拍摄了代码。但是如果我将:possible_keys占位符替换为possible_keys变量的实际文本,则一切正常。我正在摸不着为什么这不起作用,因为变量只是一个字符串。它不断抛出以下错误:

SQLSTATE[HY093]: Invalid parameter number: parameter was not defined

P.S。我只包含了证明是问题的子句而不是整个查询。我知道其余的都很好。

2 个答案:

答案 0 :(得分:1)

您正在使用命名参数,但不会将其绑定。您需要指定名称:

$STH->execute(array(':possible_keys' => $possible_keys));

答案 1 :(得分:1)

1)您正在使用命名占位符,但是您传递的是非关联数组。

如果您使用问号作为占位符,请传递一个如下数组:

$STH->execute(array("a", "b", "c"))

如果您使用的是命名占位符,请按以下方式传递数组:

$STH->execute(array("name" => "a", "name2" => "b", "name3" => "c"))

编辑:在我的回答中,我首先声明你不能在现在有一个参数(在IN()语句中)。显然,工作。