PHP字符串在()中的MYSQL中不起作用

PHP字符串在()中的MYSQL中不起作用,php,mysql,implode,Php,Mysql,Implode,我只是添加代码,因为它会说一切。是的,它不起作用,我不知道为什么:( 它返回空数组。感谢您的帮助。出现问题是因为您试图传递到表中的值中有单引号,即“Man-o'-War” 因为您使用的是数组和准备好的语句,所以在执行查询时应该传递数组: $array = array('One', 'Two', 'Three'); $query = "SELECT * FROM $table WHERE name IN (" . implode(',',str_split(str_repeat('?',coun

我只是添加代码,因为它会说一切。是的,它不起作用,我不知道为什么:(


它返回空数组。感谢您的帮助。

出现问题是因为您试图传递到表中的值中有单引号,即“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();
为了确保我们有足够的位置占位符,我们对其执行了一些魔术,并在语句中获得足够的

必须将数组中要绑定的所有值传递给
PDOStatement->execute()
,或者必须使用
PDOStatement->bindValue()
绑定每个值,然后调用
PDOStatement->execute()
,不带任何参数。将数组(空或不空)传递给
execute())
将替换任何以前的绑定,并可能导致错误,例如,如果传递空数组,MySQL会出现错误“SQLSTATE[HY000]:常规错误:2031”(CR_PARAMS_NOT_BOUND)


另一个注意事项是,确保正确填充了
$table
(不,不能在PDO中将表名或列名作为参数传递)。

on
execute()
。回显您的查询。它看起来像是您认为应该的吗?利用绑定参数,这样您就不必自己封装它。我使用PDO,它会为我回显每个错误。问题是内爆的字符串实际上“不是字符串”但是我不知道为什么。当我自己写的时候,它工作了…你确定你已经正确定义了
$table
吗?好了-
Man-o'-War
正在打嗝你的查询。你应该使用准备好的语句。现在它出错了:参数编号无效:绑定变量的数量与令牌的数量不匹配我知道你会拉取是山姆干的!-@JayBlanchard-Yep Ralph,一旦我们注意到真正的问题,它就像在桶里吃蛋糕一样!-@Fred ii比桶里的鱼更好,任何一天Sam-@JayBlanchard;-)
$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();