我有一系列GUID:
Array
(
[0] => 1770302746_580821208_2068022554_1652435499
[1] => 595039408_884272175_1344680100_1997277231
...
)
我对逗号字符串*内爆*:
1770302746_580821208_2068022554_1652435499,595039408_884272175_1344680100_1997277231
然后我传递给sql DELETE语句:
$q=$conn->prepare(" DELETE FROM su_posts_att_sort WHERE FileGUID IN ({$GUIDs}) ");
$q->execute();
但是没有删除任何行。放置try / catch块以返回任何异常都没有抛出任何异常。谁能让我知道我哪里出错?
*还试过用双引号括起来的每个GUID。
修改 这是提交的sql:
DELETE FROM su_posts_att_sort WHERE FileGUID IN ('1770302746_580821208_2068022554_1652435499','595039408_884272175_1344680100_1997277231')
通过控制台正常工作......
答案 0 :(得分:2)
你需要使用单引号,而不是双引号,当然不是不引用 - 它们包含下划线,所以它们绝对是字符串,而不是数字。
但是,不仅仅是添加引号,最好使用PDO::quote
方法,因为这样可以保证他们使用正确的引号,无论您使用什么数据库,无论多么奇怪字符可能潜伏在数据中。
您可以在一行代码中将PDO::quote
应用于数组中的所有元素,并使用implode()
将array_map()
应用于$guids = implode(',', array_map(array($pdo,'quote'), $guidArray));
。像这样:
{{1}}