1

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

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

4

1 回答 1

2

你需要使用单引号,而不是双引号,当然也不能不加引号——它们包含下划线,所以它们肯定是字符串,而不是数字。

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

您可以PDO::quote在一行代码中应用到数组中的所有元素,以及implode()使用array_map(). 像这样的东西:

$guids = implode(',', array_map(array($pdo,'quote'), $guidArray));
于 2013-01-18T17:30:02.803 回答