Невозможно получить данные из SQLite, используя PHP - PullRequest
0 голосов
/ 21 марта 2012

Это моя первая попытка использовать SQLite, я пытаюсь получить данные из SQLite, но не добиваюсь успеха и не генерирую исключений.

мой соответствующий код выглядит следующим образом:

$sql_query = "SELECT * FROM `item` WHERE combo LIKE '" . $value . "' LIMIT 1;";
        try {
            /*** connect to SQLite database ***/
            $dbh = new PDO("sqlite:src/mydb.s3db");
            foreach ($dbh->query($sql_query) as $row) {
                $name = $row['name'];
                echo "name".$name; 
                $style = $row['style'];
                echo $style;
                $appr = $row['appr'];
                echo $appr;
                $style = $row['style'];
                echo $style;
            }

        } catch(PDOException $e) {
            //echo $e -> getMessage();
            echo "problem with DB";
            echo "<br>";
        }

Пожалуйста, проведите меня через это.Спасибо.


//phpnifo();

PDO

PDO support enabled | PDO drivers mysql, sqlite, sqlite2

pdo_sqlite

PDO Driver for SQLite 3.x enabled | PECL Module version (bundled) 1.0.1 $Id: pdo_sqlite.c 293036 2010-01-03 09:23:27Z sebastian $ Библиотека SQLite 3.3.7

1 Ответ

2 голосов
/ 21 марта 2012

a) Скажите PDO, что вы хотите, чтобы он использовал исключения для сообщений об ошибках

$dbh = new PDO("sqlite::memory:");
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

b) вместо того, чтобы вводить параметры полезной нагрузки в оператор sql, используйте подготовленные параметризованные операторы

try {
    $stmt = $dbh->prepare( 'SELECT * FROM `item` WHERE combo LIKE ? LIMIT 1' );
    $stmt->execute( array($value) );
    foreach( $stmt as $row ) { ...

в) Если вы все еще не получили никакого вывода, попробуйте код, который безусловно печатает что-то.Например, счетчик SELECT (*) всегда будет возвращать хотя бы одну запись (если ошибок не будет).

$stmt = $dbh->prepare( 'SELECT Count(*) as cnt FROM `item` WHERE combo LIKE ?' );
$stmt->execute( array($value) );
foreach( $stmt as $row ) {
    echo 'Count: ', $row['cnt'], "\n";
}
$stmt = null;

edit: автономный пример

<?php
ini_set('display_errors', true);
error_reporting(E_ALL);

echo "start\n";

try {
    $dbh = new PDO("sqlite::memory:");
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    setup($dbh);


    $stmt = $dbh->prepare('SELECT * FROM item WHERE combo LIKE ? LIMIT 1');
    $stmt->execute( array('comboB') );
    foreach( $stmt as $row ) {
        echo
            $row['name'], " ",
            $row['style'], " ",
            $row['appr'], "\n"
        ;
    }
}
catch(Exception $ex) {
    var_dump($ex);
}
echo "done.\n";

function setup($dbh) {
    $dbh->exec('
        CREATE TABLE item (
            combo TEXT,
            name TEXT,
            style TEXT,
            appr TEXT
        )
    ');
    $stmt = $dbh->prepare('INSERT INTO item (combo,name,style,appr) VALUES (?,?,?,?)');
    $stmt->execute( array('comboA','nameA','styleA','apprA') );
    $stmt->execute( array('comboB','nameB','styleB','apprB') );
    $stmt->execute( array('comboC','nameC','styleC','apprC') );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...