2014-07-24 36 views
0

我正在使用PHP 5.3.19和SQLite3,我似乎無法添加任何行到我的表使用PHP,我沒有得到任何錯誤消息。我確實設法做了選擇,但INSERTS不起作用。無法在PHP中添加SQLite3行,沒有顯示錯誤消息

代碼:

try { 
    $dbh = new PDO("sqlite:database.db"); 
    $dbh->exec("INSERT INTO TABLE_NAME (COL1, COL2, COL3) VALUES (null, $var1, $var2)");  
    echo "Row added"; 
} 
catch(PDOException $e) { 
    echo $e->getMessage(); 
    echo "<br><br>Database <b>NOT</b> loaded successfully. "; 
    die("<br><br>Query Closed! $error"); 
} 

這個執行沒有任何錯誤消息,但該條目不會保存。

該目錄由webservd擁有,可由webservd寫入,所以我真的不知道問題出在哪裏。當我通過CLI運行一個PHP腳本時,它也不會執行任何操作,但是如果我嘗試手動輸入這些行,它確實可行。

我查了一下關於PHP和SQLite3的其他帖子,尤其是Unable to write to a chmod 777 database file on SQlite3 via php 5.3.0,但是找不到答案。

我錯過了什麼?

在此先感謝您的幫助

+1

爲什麼不在異常模式下設置PDO並在插入失敗時捕獲異常?另外,exec()返回受影響的行數。你爲什麼不檢查那個號碼?捕捉異常會告訴你哪裏出錯了。正如CodeSlayer在他的回答中提到的 - 您沒有引用插入的值。 –

+0

我把它放在異常模式,但它不會拋出任何東西。 – Cristina

+0

您發佈的代碼不是您如何在異常模式下設置PDO。你現在的另一個問題是你很容易發生SQL注入。你接受這些變量作爲用戶輸入還是什麼? –

回答

2

我想你錯過了什麼;如果您COL2和COL3是一個字符串,它應該是這個樣子:

$dbh->exec("INSERT INTO TABLE_NAME (COL1, COL2, COL3) VALUES (null, '$var1', '$var2')");

+0

是的,它們都是字符串(字符和varchar)。把變量放在''中,但它沒有改變任何東西。 – Cristina

+0

當我在CLI中運行它時,它不起作用,但是使用網頁,它的確如此!非常感謝 – Cristina

0

不要你們忘記揭掉目錄以及揭掉數據庫needin'寫入權限,在Unix或Linux安監你們全光照源碼。 Arrrr ...

+0

是的,海盜先生,它已經有寫權限。 – Cristina

-1

在查詢[例如:$query = $db->query("INSERT INTO table (column1, column2...) VALUES ('$value1','$value2'...)")]後面添加子句「OR DIE」,其中包含sqlite3函數的最後一個錯誤代碼[例如:$db-> LastErrorCode());]。這樣你就可以得到錯誤代碼(如果存在的話)。

+0

請格式化您的代碼。 –

相關問題