使用sqlite 3,php和PDO的简单查询失败

时间:2017-03-25 16:19:16

标签: php pdo sqlite

这是一个问题的第一篇文章。试图在这里找到答案,但所有相关的帖子似乎过时或使用弃用的mysql。

sqlite的新手,原谅可能会出现愚蠢的东西,但下面代码中的查询永远不会有效。注意:我们在php 5.6上运行sqlite3和PDO。 创建数据库的程序运行良好。应用程序“Db Browser for SQL Lite”显示数据库和表格和数据就好了。但是这个:

<?php
//open the database
$myPDO = new PDO('sqlite:MySqlitedb1');
print "<p>db opened</p>";
$result = $myPDO->query('SELECT * FROM users');

//if the query works
if ($result !== FALSE) {
   print "<p>query ran</p>";   
   foreach($result as $row){
   print "<p>".$row."</p>"; 
   }  
 } else {
 // when the query fails
 print "<p>query failed</p>"; 
}  //end if

// close the database connection
$myPDO = NULL;
?>

始终导致'查询失败'。对那些存在的特定记录的查询也失败。

还使用fetch和fetchall在上面的代码中尝试了一些其他测试,并且它们产生了如下错误:

mod_fcgid: stderr: PHP Fatal error: Call to a member function fetchAll() 
on boolean in (path emoved)/testpdo2.php on line 27

我确信这是由查询失败引起的,因此$ result为null / false 我显然在这里错过了一些愚蠢的东西?

乔C.

1 个答案:

答案 0 :(得分:0)

这已经解决了。代码应该有效(现在就可以)。它不是

  
      
  • 目录问题
  •   
  • 权限问题
  •   
  • tmp目录中的debug_kit.sqlite文件,或tmp目录中的任何文件。
  •   
  • SCP或“同步”目录问题
  •   

我修改了代码并捕获了一个异常(第一个是“坏”DB然后是好的):

<?php

$myPDO = NULL;              //close db just in case...

//open the database
$myPDO = new PDO('sqlite:newsqlite2.db');

//throw exceptions
$myPDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

if ($myPDO != null)
    print "<p>db connected</p>";
else
    print "<p>db did not connect</p>";
// result: db does open

//1st test
try
{
     $result0=$myPDO->query('SELECT * from  users');
     print "<p>query ran</p>";
}
catch(PDOException $e)
{
     echo "Statement failed: " . $e->getMessage();
     return false;
}

// close the database connection
$myPDO = NULL;

?>

这引发了原始数据库(MySqlitedb1)和PDO异常的错误:

SQLSTATE[HY000]: General error: 11 database disk image is malformed

现在,DESPITE分析在数据库上运行的工具,说它“很好”并能够使用“DB Browser for SQLite”之类的工具处理数据库,没有任何问题,也没有创建其他数据库的问题,SOMETHING是错误的文件。这导致查询失败并始终返回布尔值'false',因此代码失败。

我们通过将数据库转储到sql文件,然后导入它(使用“DB Browser for SQLite”)来修复数据库,以创建一个包含数据的新数据库(newsqlite2.db)。使用该数据库,代码运行正常,提取数据等。

关于数据库为何/如何变得“腐败”或者是什么奇怪的腐败,我没有任何线索。 :)

乔C.