PHPでSQLite3を使用しようとしていますが、UPDATEを実行する必要があるまでは問題ありませんでした。COMMITが恋しいと思いますが、その方法がわかりません。
私のコードは次のとおりです。
$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 );
私が欲しいのは、データベースからすべての質問を読み、resposta
列からの回答$respostes
をPOSTによって受信された変数内の回答と比較することです。それもうまくいきます。次に、答えが正しければ、correcta
この行の列を1に設定して、この正しさをデータベースに設定する必要があります。クエリを表示してからSQLite3コンソールに配置すると、正しく機能しますが、再確認するとPHPでは$conn->changes()
、UPDATEが1行に影響したことを示している場合でも、0のままです。
私は理解できることをすべてチェックしました、boxberry.dbファイルはすべてのユーザーが読み取りおよび書き込み可能です、デフォルトであるはずのSQLITE3_OPEN_READWRITEでそれを操作しようとしました、COMMITの実行を追加しようとしました、あるいは同じexecに入れました両方をセミコロンで区切る行...エラーはスローされませんが、値は変更されません。
PythonでSQLiteを使用すると、UPDATEの後にコミットする必要があることがわかりましたが、PHPでそれを行う方法が見つかりません。
このスクリプトは次のようなものを返します。{"canvis":1、 "tmp":0}つまり、1回の変更である必要がありますが、データベースの値は1である必要があるときに0のままです。