2016-09-27 2 views
0

Ich überprüfe ein Projekt, und ich fand diesen Code, der Datensätze aus MySQL löschen soll, obwohl dies nicht der beste Ansatz ist, um dies zu erreichen, muss ich das machen funktioniert, aber für mich ist in Ordnung, deshalb bin ich hier, weil ich nicht den Fehler sehe oder was ist falsch mit diesem Code, zeigt keine Fehler, Warnung, nichts Ich habe den Code direkt in PHPMyAdmin getestet und es funktioniert gut, so das der Code ist ...Löschen von Datensätzen aus MySQL innerhalb foreach Schleife - PHP

$get_records = mysql_query('SELECT id_detail FROM my_table WHERE user_id = "'.$user_id.'" AND last_date BETWEEN "'.$date1.'" AND "'.$date2.'"') or die (mysql_error()); 

$array_details = array(); 

while ($details = mysql_fetch_array($get_records)) { 

    $array_details[] = $details['id_detail']; 

} 


$array_details = array_unique($array_details); 


foreach ($array_details as $id_detail) { 

    $delete_detail = mysql_query("DELETE FROM my_table WHERE user_id = '".$user_id."' AND id_detail = '".$id_detail."'") or die (mysql_error()); 
} 

ich mit der gleichen ID Detail (dies funktioniert auf diese Weise) zwei Datensätze in derselben Tabelle bekam, so Wenn ich die ID correcly mit der Abfrage innerhalb der foreach Schleife bekommen sollte sie löschen alle die Datensätze mit diesem id_detail und user_id spielt keine Rolle, wenn in der Abfrage ich sage, zwischen welchen Daten diese IDs erhalten, löscht es nur eine, und das ist, die das Datum zwischen diesem Bereich

Ich habe keine Ahnung, warum ist nicht beide löschen, eine Idee, was ich vermisse?

HINWEIS: Wie ich bereits sagte, wenn ich diese Abfrage direkt in PHPMyAdmin mache, funktioniert es gut und wenn ich aus PHP tun, löschen Sie nur einen.

+0

Vielleicht ist es nur eine ID anstelle von zwei (in diesem Skript) bekommen –

+0

Warum würden Sie PHP als Mitte-Mann für diesen Einsatz? Sie umgehen MySQLs eingebaute Logik und erhöhen Ihre Abfragen um n + 1. Warum nicht einfach eine einzige 'DELETE FROM {logic}' Anweisung? Selbst wenn Sie aus irgendeinem Grund PHP-Logik zwischen all diesen Dingen haben möchten, haben Sie ein Array von Primärschlüsseln (mutmaßlich), also warum nicht "WHERE IN" nutzen, um Abfragen zu reduzieren? – Blake

+0

Wenn Sie immer 2 Einträge in der Tabelle haben, kann das Löschen nach dem Offset etwas wie i = 0 lösen; foreach ($ a als $ b) {$ my_query zu $ ​​b [0]; $ i ++;} – xYuri

Antwort

0

Funktioniert das Ersetzen dieses Codes mit dieser Abfrage für Sie?

$delete_detail = mysql_query("DELETE FROM my_table WHERE user_id = '".$user_id."' AND id_detail IN (SELECT id_detail FROM my_table WHERE user_id = '".$user_id."' AND last_date BETWEEN '".$date1."' AND '".$date2."')") or die (mysql_error()); 
+0

ich werde versuchen, diese –

+0

Escape stattdessen Werte wie '.2.''. Es ist syntaktisch korrekt, was eine Verbesserung darstellt, aber das Ziel verfehlt. – tadman

+0

Immer noch nicht funktioniert, habe ich versucht, aber nach wie vor löscht es nur ein>:] –

Verwandte Themen