2012-03-21 21 views
0

这是我第一次尝试使用SQLite,我试图从SQLite中检索数据,但我没有成功,也没有抛出任何异常。无法使用PHP从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

+0

未评论 “回声$ë - >的getMessage();”并检查它说什么。 – sikander 2012-03-21 16:56:31

+0

'var_dump($ dbh-> query($ sql_query))''''var_dump($ dbh);'构造之后,他们说什么?然后做一个'die($ sql_query);'并在Navicat中手动运行查询,或者查看会发生什么。 – 2012-03-21 16:59:01

+0

确保您已在PHP中启用了所有错误/通知报告。 – halfer 2012-03-21 20:36:13

回答

2

一)告诉PDO您希望使用的例外而不是把有效载荷paraemters到SQL语句中使用报告错误

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

二)准备参数化的语句

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

C)如果你仍然没有得到任何输出,尝试无条件打印某些东西的代码。例如。一个SELECT Count(*)将总是返回至少一条记录(如果没有发生错误)。

$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; 

编辑:自包含的示例

<?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')); 
} 
+0

尝试所有,但没有结果。 ive用Phpinfo输出abt PDO和sqlite更新了我的问题,可能有助于理解任何问题? – Maven 2012-03-22 09:39:38

+0

@Maven:自成一体的例子加入 – VolkerK 2012-03-22 09:53:37

+0

工作。谢谢。 :) – Maven 2012-03-22 12:08:03