簡體   English   中英

PDO PHP SQLite3數據庫連接常規錯誤14

[英]PDO PHP SQLite3 database connection General Error 14

我有2個sqlite3.x數據庫(來自iPhone),一個來自游戲應用程序,另一個是通訊錄。

我在php conf中記錄日志並顯示錯誤“ on”。

使用PHP / PDO,我可以顯示游戲數據庫中的字段和值,包括我在結果頁中捕獲的圖像斑點,並使用“ img src ='data:...”進行渲染。我在其他字段上使用htmlentities來捕獲plist二進制blob之類的東西。

我正在使用perl腳本生成第一頁,並且使用對sqlite3的系統調用來獲取示例數據。 該腳本正在通過作為cli參數提供的目錄進行遞歸搜索。

我基本上是從數據庫中的每個表中獲取第一條記錄(作為數據樣本),為用戶提供他們想要進一步查詢的字段的選項,並將這些選項傳遞給對目標表執行查詢的表單處理程序,以及從所選列中獲取數據。

但是...嘗試連接到地址簿數據庫時,出現“無法打開數據庫”的一般錯誤。

我已經檢查了數據庫的權限,所有權,將它們都放在同一個目錄中,使它們完全對世界開放。

真正奇怪的是,我可以使用sqlite3從命令行非常愉快地查詢所有數據庫,但是使用PDO時會出現此錯誤。

整個過程如下:

($db and $strSQL vals passed from previous page)

$dbh = new PDO('sqlite:'.$db);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
$result = $dbh->query($strSQL);

即使我從表中選擇一個簡單的主鍵列,也會收到錯誤,因此我可以肯定這不是數據處理問題。 我什至嘗試對Firefox和Chrome數據庫使用相同的腳本...完全沒有問題。

真的很感謝任何想法/指針/建議。 這是我的腦袋!

干杯。

OK ...所以看來,盡管事實上數據庫文件本身是完全打開的(chmod 777),但它們所在的目錄必須是可寫的! 仍不確定不需要通過可寫目錄從命令行獲得sqlite如何,但是對於PHP / PDO查詢,您肯定需要它。

未顯示結果的數據庫設置了預寫日志記錄(WAL)位(文件頭的字節18和19),並且該目錄需要可寫,以便SQLite可以創建要查詢的數據庫的WAL版本。 對於非WAL數據庫,字節18和19設置為0x01和0x01,對於啟用WAL的數據庫設置為0x02 0x02。

是什么讓它消失了?...當我重新運行查詢並碰巧將數據庫移入數據庫時​​,突然出現了地址簿數據庫文件的副本,在文件名的末尾附加了“ -wal”和“ -shm”用於測試的可寫目錄。

去搞清楚!

PS ..有趣的是,每次更改日志模式(使用db查詢“ pragma journal_mode = [wal | off]”)時,位於94和95字節的2字節計數器將遞增1。 在模式之間進行切換時檢查db的哈希值時,請注意這一點,並且無法獲得相同的2個哈希值。 我在數據庫之前和之后進行了xxd處理,將輸出通過管道傳輸到txt文件,然后將2個txt文件進行比較...然后有這些計數器字節。

根據錯誤消息“無法打開數據庫”,它無法訪問sqlite文件。 我確定您已經檢查了上一頁中的“ $ db”變量。

很難給您一個明確的答案。 您是否可以在沒有PDO的情況下嘗試,僅檢查sqlite文件或PHP代碼是否存在問題。

發布結果,讓我們看看。

暫無
暫無

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

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