我试图在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