我只是添加代码,因为它会说出一切。是的,它不起作用,我不知道为什么:(
$array = array('One', 'Two', 'Three');
$string = "'" . implode("', '", $array) . "'";
$query = "SELECT * FROM $table WHERE name IN (" . $string . ")";
$make = $this->conn->prepare($query);
$make->execute();
$result = $make->fetchAll();
返回空数组。谢谢你的帮助。
答案 0 :(得分:1)
问题出现了,因为您在尝试传递给表格的值中有单引号,即" Man-o' -War"
因为您正在使用数组和预准备语句,所以在执行查询时应该传递数组:
$array = array('One', 'Two', 'Three');
$query = "SELECT * FROM $table WHERE name IN (" . implode(',',str_split(str_repeat('?',count($array)))).") ";
$make = $this->conn->prepare($query);
$make->execute($array);
$result = $make->fetchAll();
为了确保我们有足够的位置占位符,我们会使用implode()
,str_split()
和str_repeat()
执行一些魔术,以便在语句中获得足够的?
。
来自Demystifying PHP's Data Objects (PDO)
您必须传递所有值以在 数组 中绑定到
PDOStatement->execute()
,或者您必须使用PDOStatement->bindValue()
绑定每个值,然后调用{ {1}}没有参数。将数组(空或非空)传递给PDOStatement->execute()
将替换任何先前的绑定并可能导致错误,例如与MySQL错误" SQLSTATE [HY000]:一般错误:2031" (CR_PARAMS_NOT_BOUND)如果您传递了一个空数组。
另外请注意,请确保execute()
已正确填充(并且否,您无法在PDO中将表或列名称作为参数传递)。