2012-04-07 8 views
1

Ich möchte alle Datensätze aus meiner Tabelle und Schleife durch alle diese Datensätze, bis ich zu dem Datensatz, wo die Numtimespaid-Spalte ist gleich 0. Sobald ich finde, dass Spalte, die ich will um es für diesen Datensatz auf 2 zu aktualisieren und dann zu beenden. Hier ist, was habe ich das nicht richtig funktioniert:Durchlauf Datensätze, Update einen Datensatz und Beenden

$query1 = "SELECT * FROM ".$line." ORDER BY datestamp, timestamp"; 
$result1 = mysql_query($query1) or die(mysql_error()); 
while($row = mysql_fetch_array($result1)){ 
    if ($row[numtimespaid] == 0) { 
     $queryupdate="UPDATE ".$line." SET numtimespaid=1"; 
     $resultu=mysql_query($queryupdate); 
     break; 
     } 
    } 

Alle Ideen, was ich falsch mache und/oder den richtigen Weg, dies zu tun?

+1

Auch wenn es mehr als 1 Zeile mit numtimepaid = 0 gibt, möchten Sie nur die erste 1 aktualisieren, die Sie finden? – phpmeh

Antwort

5

Es ist nicht notwendig, das Rowset von einer SELECT Anweisung zu wiederholen. Sie können einfach die erste Zeile mit diesem Wert aktualisieren. Diese Abfrage wird genau einen Datensatz aktualisieren, der numtimespaid = 0 entspricht. Wenn Sie alle Zeilen, die diesem Kriterium entsprechen, aktualisieren möchten, entfernen Sie einfach die LIMIT 1.

$result = mysql_query("UPDATE $line SET numtimespaid=1 WHERE numtimespaid = 0 ORDER BY datestamp, timestamp LIMIT 1"); 

By the way, wissen wir nicht, was der Inhalt $line sind, aber hoffentlich haben Sie richtig, diesen Wert gefiltert, wenn es aus Benutzereingaben kommt. Wenn es von Benutzereingaben kommt, wird empfohlen, seinen Wert gegenüber einer weißen Liste möglicher Tabellennamen zu überprüfen:

// $line can be one of table1,table2,table3 
if (!in_array($line, array('table1','table2','table3')) { 
    // FAIL, don't execute the query 
} 
+0

Danke für die Antwort zurück. Eigentlich möchte ich es maltimepaid == 0 oder 1 machen. Ich werde das ausprobieren. Danke noch einmal. – Charlie

0
if ($row[numtimespaid] == 0) { 

Allgemeinen interpretiert wird als numtimespaid eine nicht definierte Konstante ist. Geben Sie die folgenden Anführungszeichen ein:

if ($row['numtimespaid'] == 0) { 

Dann erkennen Sie, dass Michaels Antwort insgesamt besser ist.

+0

Danke Regenschirm, ich werde auch damit experimentieren. – Charlie

Verwandte Themen