[英]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.