0

sqlite データベースをクエリするこの php スクリプトを次のように作成しました。

$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();
}

ただし、$r->fetchAll();空の配列を返します。

行が存在し、$ip が 127.0.0.1 であることは 100% 確信しています。

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

どんな助けでも大歓迎です

4

1 に答える 1

2

おそらく単一の結果を消費するif($r->fetchColumn() >= 1)ため、おそらく削除する必要があります。

結果セットの次の行から 1 つの列を返すか、それ以上行がない場合は FALSE を返します。

また、少なくとも 1 つの列があることを疑うべきではありません。代わりに、$resultが空かどうかを確認する必要があります。

おそらく、次のようなものを実行してみてください。

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

それでも配列に 0 レコードが表示される場合は、上流に何か問題がある可能性があります。それでもレコードが 0 の場合はお知らせください。

于 2012-04-07T08:21:42.110 に答える