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?