我試圖在PHP中使用SQLite3,並且在我需要執行UPDATE之前一直很好。 我說我錯過了一個COMMIT,但我沒有找到如何去做的方式。如何在PHP上提交SQLite3更新?
我的代碼是:
$respostes = $_POST['respostes'];
$return = array();
$conn = new SQLite3('/home/pi/boxberry/boxberry.db', SQLITE3_OPEN_READWRITE);
$res = $conn->query('SELECT numero, resposta FROM preguntes WHERE NOT correcta');
while($resposta = $res->fetchArray(SQLITE3_ASSOC))
{
if(strstr(strtolower($respostes), strtolower($resposta['resposta'])) !== FALSE)
{
$conn->exec('UPDATE preguntes SET correcta = 1 WHERE numero = ' . $resposta['numero']);
$return['canvis'] = $conn->changes();
$conn->exec('COMMIT');
$res = $conn->query('SELECT correcta FROM preguntes WHERE numero = ' . $resposta['numero']);
$tmp = $res->fetchArray(SQLITE3_ASSOC);
$return['tmp'] = $tmp['correcta'];
}
}
.... more stuff ...
echo json_encode($return);
我想要的是從數據庫中讀取所有的問題,答案從與POST收到$respostes
變量中的答案resposta
列比較。這也很好。 然後,如果答案是正確的,我需要把這個正確性的數據庫,設置該行的correcta
列爲1. 如果我顯示查詢,然後我把它放在SQLite3控制檯上它工作正常,但是當我在PHP上重新檢查它始終爲0,即使$conn->changes()
顯示UPDATE影響1行。
我檢查了我的計算結果,我發現boxberry.db文件可以被任何用戶讀寫,我試着用SQLITE3_OPEN_READWRITE調用它作爲默認值,我嘗試添加一個COMMIT的執行,甚至把它在同一個執行行中用分號分隔...沒有引發錯誤,但值不會改變。
在Python中使用SQLite我發現我需要在UPDATE後執行COMMIT,但是我找不到在PHP中執行它的方式。
此腳本返回類似: {「canvis」:1,「TMP」:0} 這意味着它應該是1層的變化,但隨後在數據庫中的值仍爲0時,應爲1
PDO可能更容易,更便攜。 – 2012-08-17 14:07:15