我准备好的查询如下所示:
$sql = "SELECT $t1.id FROM $t1 WHERE $t1.name IN (?)";当我尝试的时候:
$stmt = Sql::$select->prepare($sql);
$string="'aaa','bbb','ccc'";
$stmt->bind_param('s', $string);...it没有返回预期的结果。它将字符串视为一个名称,而不是许多单独的名称。如何解决呢?
函数的其余部分:
$stmt->execute();
$stmt->store_result();
return $stmt;发布于 2012-11-12 18:10:20
试着像这样修改查询
$sql = "SELECT $t1.id FROM $t1 WHERE FIND_IN_SET($t1.name, ?)>0";
$stmt = Sql::$select->prepare($sql);
$string='aaa,bbb,ccc';
$stmt->bind_param('s', $string);这种解决方案是不可靠的。请参阅 FIND_IN_SET(str,strlist)
正确的方法是对in语句中的每个元素使用单独的占位符。
另一个建议是,去掉IN语句,在php中运行一个循环来生成查询并绑定参数。
发布于 2012-11-12 18:19:16
问题是带有's‘的bind_param函数将参数作为单个字符串进行威胁,因此它基本上将您的查询转换为:
"SELECT $t1.id FROM $t1 WHERE $t1.name IN (''aaa','bbb','ccc'')";一种快速的解决方法是将字符串变量更改为:
$string="aaa','bbb','ccc";注意:不带前引号/尾引号(可以使用trim($string, "'")
如果不起作用,您还可以尝试反转报价:使用" '而不是。
更可靠和健壮的解决方案是更改查询以包含每个字符串的? (使用带有expolode() / implode() php函数的数组。
https://stackoverflow.com/questions/13341180
复制相似问题