PHP PDO从数组中删除

时间:2013-01-18 17:20:56

标签: php sql pdo

我有一系列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') 

通过控制台正常工作......

1 个答案:

答案 0 :(得分:2)

你需要使用单引号,而不是双引号,当然不是不引用 - 它们包含下划线,所以它们绝对是字符串,而不是数字。

但是,不仅仅是添加引号,最好使用PDO::quote方法,因为这样可以保证他们使用正确的引号,无论您使用什么数据库,无论多么奇怪字符可能潜伏在数据中。

您可以在一行代码中将PDO::quote应用于数组中的所有元素,并使用implode()array_map()应用于$guids = implode(',', array_map(array($pdo,'quote'), $guidArray)); 。像这样:

{{1}}