2012-04-07 12 views
0

Ich habe diese PHP-Skript, das als so eine SQLite-Datenbank abfragt:PHP SQLite fetchAll leeres Array zurückkehr

$r = $db->prepare("SELECT * FROM logs WHERE ip=?;"); 
$r->bindValue(1, $ip, PDO::PARAM_STR); 
$r->execute(); 

if($r->fetchColumn() >= 1) { 
    echo "contains columns.. <br />"; 
$result = $r->fetchAll(); 
    foreach ($result as $log) { 
     echo "in loop"; 
     $log_ip = $log['ip']; 
     $log_userAgent = $log['userAgent']; 
     $log_hits = $log['hits']; 

     $log_hits = $log_hits++; 

     echo "hits " . $log_hits; 

     $hitUp = $db->prepare("UPDATE logs SET hits = ? WHERE ip = ?;"); 
     $hitUp->bindValue(1, $log_hits, PDO::PARAM_INT); 
     $hitUp->bindValue(2, $ip, PDO::PARAM_STR); 
     $hitUp->execute(); 
} 

ist jedoch $r->fetchAll(); ein leeres Array zurück.

Ich bin 100% sicher, dass die Zeile vorhanden und $ ip ist 127.0.0.1:

sqlite> select * from logs; 
1|127.0.0.1|1|Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.54.16 (KHTML, like Gecko) Version/5.1.4 Safari/534.54.16 

Jede Hilfe sehr

+0

Wenn Sie 'WHERE ip =?' Entfernen, erhalten Sie immer noch ein leeres Array? –

+0

@ixfeetsix ja. : \ – Daniel

+0

Wenn ich SELECT * FROM Protokolle ausführen; in sqlite3 gibt es die richtigen Zeilen zurück, aber in pdo/php nein? – Daniel

Antwort

2

geschätzt wird Sie wahrscheinlich die if($r->fetchColumn() >= 1) wie es wahrscheinlich consumes your single result entfernen müssen:

Gibt eine einzelne Spalte aus der nächsten Zeile einer Ergebnismenge zurück oder FALSE, wenn keine Zeilen mehr vorhanden sind.

Auch sollten Sie nicht bezweifeln, dass Sie mindestens eine Spalte haben, sollten Sie stattdessen überprüfen, ob $result leer ist.

Vielleicht versuchen, dass durch so etwas wie diese ausgeführt wird:

$r = $db->prepare("SELECT * FROM logs;"); 
$r->execute(); 
$result = $r->fetchAll(); 
echo "result contains " . count($result); 

Wenn Sie noch 0 Datensatz im Array erhalten, vielleicht etwas nicht in Ordnung weiter stromaufwärts ist. Lass es mich wissen, wenn du immer noch 0 Rekord bekommst.