2017-09-18 12 views
0

を働いていない私は、このは、MySQL、PHPからバルクを削除

$emails= array(); 
    foreach ($items_emails as $datav) { 

$emails[] = $datav[5]; 
} 

のような配列を持っているし、私はでMySQLから削除するPDOオブジェクトを使用しようとPDOオブジェクト

でのMySQL、PHPからバルクを削除する必要があります配列パラメータ

$sql = "DELETE FROM ".$data_table." WHERE email_address = :email_address"; 
    $stmt = $db_datas->prepare($sql); 
$stmt->execute(array(':email_address' => $emails)); 

私はまさにこのエラーを文字列への変換

配列を取得この文は

$stmt->execute(array(':email_address' => $emails)); 
+1

'$ emails'は配列であり、文字列ではありません。 '$ emails'を繰り返して、私が推測する' '電子メール' 'をそれぞれ削除してください。 – chris85

+0

これはeacheの電子メールを削除するのに時間がかかります –

+0

'in'で1つのコードで行い、各アドレスのプレースホルダーを配列に入れます。 – chris85

答えて

1

"DELETE FROM x WHERE y = z"構文は、アレイに障害が発生した渡す理由です、比較のために単一の値を受け入れます。

$sql = "DELETE FROM ".$data_table." WHERE email_address = :email_address"; 
$stmt = $db_datas->prepare($sql); 

foreach ($emails as $email) { 
    $stmt->execute(array(':email_address' => $email)); 
} 

または代わりに、単一のクエリにそれを回すためにWHERE x IN (list)を使用します:

$numberOfPlaceholders = count($emails); 
$placeholdersArray = str_split(str_repeat('?', $numberOfPlaceholders)); 
$placeholders = implode(',', $placeholdersArray); 
$sql = "DELETE FROM $data_table WHERE email_address IN ($placeholders)"; 
$stmt = $db_datas->prepare($sql); 
$stmt->execute($emails); 

あなたは別々のプレースホルダを作成する必要があなたは値のあなたの配列をループし、個別にそのようなエントリを削除することができますリスト内のすべての要素がコメント内で指摘された配列を渡すことができるようにします。

+0

あなたの 'implode'メソッドは動作しません。 'emails'のどれも一致しません。 – chris85

+0

手入れが行き届いていますか?この例では、 'IN'ではなく' = 'で使用されています。それとも、私は本当に疲れて、それを見ることができません。 – ppajer

+0

それは結構ですが、 'WHERE email_address IN( '[email protected]、[email protected]')' < - それは複数のメールで1文字列になります。例えば'chris @ gmail.com'や' chris @ yahoo.com'は削除されます。 '$ emails 'の値の数を数え、その多くのプレースホルダーを挿入し、次に配列をバインドする必要があります。 – chris85

関連する問題