PHP PDO从数组中删除

PHP PDO从数组中删除,php,sql,pdo,Php,Sql,Pdo,我有一个guid数组: Array ( [0] => 1770302746_580821208_2068022554_1652435499 [1] => 595039408_884272175_1344680100_1997277231 ... ) 我将其内爆为逗号分隔的字符串*: 1770302746_580821208_2068022554_1652435499,595039408_884272175_1344680100_1997277231 然后将

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

通过控制台可以很好地工作…

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

但是,与其只是添加引号,不如使用
PDO::quote
方法,因为这将保证他们使用正确的引号,无论您使用的是什么数据库,也不管数据中可能隐藏着什么奇怪的字符

您可以使用
array\u map()
PDO::quote
应用于一行代码中的数组中的所有元素,以及
内爆()
。大概是这样的:

$guids = implode(',', array_map(array($pdo,'quote'), $guidArray));

你在ID周围加引号吗?它们最有可能被认为是需要引用的字符串。如果没有引号,这些字符串将被视为不可靠/不正确的整数,mysql将查找
1770302746
595039408
,而忽略其他字符串作为垃圾。尝试使用单引号和双引号使用以下内容:
$GUIDs=“\”。内爆(“\”,\”,$\u POST['arrdelected'].“\'”
@Eamonn尝试回显生成的SQL并将其添加到问题中。@JoachimIsaksson刚刚更新了问题,尝试了
$GUIDs=introde(数组映射(数组($conn,'quote'),$\u POST['arrdelected']))
无效。这看起来是一个非常有效的方法,但是…我注意到结果字符串不是逗号分隔的,它不需要吗?@Eamonn是的,它需要逗号分隔。@JoachimIsaksson如何实现这一点,使用此方法?我以前没有使用过它…@Eamonn如果我没记错的话,只需添加一个带有逗号,
,“
作为第一个参数,它将以逗号作为分隔符内爆。