2

关于以下为什么会引发参数错误的任何想法。我已经查看了关于 SO 的所有其他答案,但无论如何我都以与那些解决方案相同的方式来解决这个问题,但这似乎仍然不起作用。将应用程序从 adodb 切换到 pdo。

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

sql片段

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

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

4

2 回答 2

1

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

$STH->execute(array(':possible_keys' => $possible_keys));
于 2013-02-18T15:05:20.710 回答
1

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

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

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

如果您使用命名占位符,请像这样传递一个数组:

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

编辑:在我的回答中,我首先声明您不能将参数放置在您现在拥有的位置(在 IN() 语句中)。显然,这应该有效。

于 2013-02-18T15:06:22.137 回答