Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySql find_in_set()与PHP PDO配合不好_Php_Pdo - Fatal编程技术网

MySql find_in_set()与PHP PDO配合不好

MySql find_in_set()与PHP PDO配合不好,php,pdo,Php,Pdo,关于为什么下面会抛出参数错误的任何想法。我已经看了所有其他的答案,但我正在以与这些解决方案相同的方式处理这个问题,但这似乎仍然不起作用。将应用程序从adodb切换到pdo $possible_keys = implode( ",", $possible_keys_array ); sql代码段 WHERE FIND_IN_SET(table.key,:possible_keys) $STH = $DBH->prepare( $sql ); $STH->execute( arra

关于为什么下面会抛出参数错误的任何想法。我已经看了所有其他的答案,但我正在以与这些解决方案相同的方式处理这个问题,但这似乎仍然不起作用。将应用程序从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 );
我只插入了代码的快照。但是,如果我用可能的_keys变量的实际文本替换:可能的_keys占位符,那么一切都很好。我正在琢磨为什么这行不通,因为变量只是一个字符串。它不断抛出以下错误:

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

p、 我只加入了被证明是问题所在的条款,而不是整个问题。我知道它的其余部分没有问题。

您使用的是命名参数,但没有将其本身绑定。您需要指定名称:

$STH->execute(array(':possible_keys' => $possible_keys));
1) 您使用的是命名占位符,但传递的是非关联数组

如果使用问号作为占位符,请按如下方式传递数组:

$STH->execute(array("a", "b", "c"))
$STH->execute(array("name" => "a", "name2" => "b", "name3" => "c"))
如果使用的是命名占位符,请按如下方式传递数组:

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

编辑:在我的回答中,我首先声明不能将参数放在现在有参数的地方(在In()语句中)。显然,这应该行得通

太好了,我现在就试试。我错过了那个。然而,为什么它对所有其他查询都有效呢。我始终使用命名的占位符,但使用的是具有相同顺序的值的普通数组来将数据传递给stmt。它似乎在所有其他查询中都能正常工作,为什么会这样?我很感激你的信息,谢谢。它确实修复了它,谢谢你。有趣的是,正如我上面所说的,它适用于其余部分,但不适用于find_in_set(),我只能假设在所有情况下使用非关联数组一定不安全,因此我将使它们都关联。再次感谢。