簡體   English   中英

使用sqlite 3,php和PDO的簡單查詢失敗

[英]Simple Query using sqlite 3, php and PDO fails

這是問題的第一篇文章。 試圖在這里找到答案,但是所有相關的帖子似乎都過時或使用不推薦使用的mysql。

sqlite的新手,請原諒看起來可能很愚蠢的內容,但以下代碼中的查詢永遠無法執行。 注意:我們正在使用php 5.6在站點上運行sqlite3和PDO。 創建數據庫的程序運行正常。 應用程序“ SQL Lite的Db瀏覽器”可以很好地顯示數據庫,表和數據。 但是這個:

<?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.

解決了。 該代碼應該已經起作用(現在可以)。 不是

  • 目錄問題
  • 權限問題
  • 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分析工具在數據庫上運行,稱它“很好”,並且能夠使用“ SQLite的數據庫瀏覽器”之類的工具在數據庫上工作,而沒有任何問題,也沒有創建其他數據庫的問題,因此文件中存在某些問題。 這導致查詢失敗,並且始終以布爾值“ false”返回,因此代碼失敗。

我們修復了數據庫,方法是將其轉儲到sql文件中,然后將其導入(使用“ SQLite的數據庫瀏覽器”)以創建包含數據的新數據庫(newsqlite2.db)。 使用該數據庫,代碼運行良好,提取了數據等。

至於為什么/如何使數據庫“損壞”或什么是奇怪的損壞,我不知道。 :)

喬C.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM