1

GUIDの配列があります:

Array
(
    [0] => 1770302746_580821208_2068022554_1652435499
    [1] => 595039408_884272175_1344680100_1997277231
    ...
)

これをコンマで区切った文字列に変換します*:

1770302746_580821208_2068022554_1652435499,595039408_884272175_1344680100_1997277231

次に、sqlDELETEステートメントに渡します。

$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このメソッドを使用することをお勧めします。これにより、使用しているDBや、データに潜んでいる奇妙な文字に関係なく、正しい引用符が使用されていることが保証されます。

を使用PDO::quoteして、1行のコードで配列内のすべての要素に適用できます。このようなもの:implode()array_map()

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