PDO SQLite sorgu sıfır sonuç sorunu

0 Cevap php

Etrafa bir göz yaşadım ama bu konuda herhangi bir bilgi bulmak için görünmüyor olabilir. Ben bellek SQLite veritabanları ve PDO ile benim kod ya da bilinen bir konu ile ilgili bir sorun olup olmadığından emin değilim.

Temelde, bir bellek SQLite veritabanı tabloya tek bir satır ekledikten sonra, ben eklenen öğe eşleşmiyor bir sorgu sıfır satır dönmek olduğunu beklersiniz. Ancak, aşağıdaki kodu tek bir satır (yanlış) ama hiçbir gerçek PDO hata kodunu verir.

<?php

    // Create the DB
    $dbh = new PDO('sqlite::memory:');
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // Data we'll be using
    $name = 'Entry';

    // Create DB table
    $dbh->query('
        CREATE TABLE
            Test
            (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                name VARCHAR(50) NOT NULL
            )
    ');

    // Insert data
    $stmt = $dbh->prepare('
        INSERT INTO
            Test
            (
                name
            )
        VALUES
            (
                :name
            )
    ');

    $stmt->bindParam(':name', $name, PDO::PARAM_STR, 50);
    $stmt->execute();

    // Check data has actually been inserted
    $entries = $dbh->query('
        SELECT
            *
        FROM
            Test
    ')->fetchAll(PDO::FETCH_ASSOC);

    var_dump($entries);

    // Qurey DB for non-existent items
    $stmt = $dbh->prepare('
        SELECT
            *
        FROM
            Test
        WHERE
            name != :name
    ');

    $stmt->bindParam(':name', $name, PDO::PARAM_STR);
    $stmt->execute();

    // How many rows returned
    echo $stmt->rowCount();

    // Actual data returned
    var_dump($stmt->fetch(PDO::FETCH_ASSOC));
?>

Ben çalışmak etrafında bazı hackery ile sorun başardım ama bunu yapmak zorunda değil güzel olurdu:

<?php

    echo (
        (0 == $stmt->rowCount()) || 
        (
            (1 == $stmt->rowCount()) && 
            (false === (($row = $stmt->fetch(PDO::FETCH_ASSOC)))) && 
            ('0000' == array_pop($dbh->errorInfo()))
        )
    ) ? 'true' : 'false';

?>

Herkes yardımcı ya da ben yapmış olabilir herhangi bir göze çarpan hataları işaret edebilir?

0 Cevap