php - このSQL SELECTステートメントが、挿入したばかりの行を取得しないのはなぜですか?

php sql sqlite pdo

インメモリSQLiteデータベースを作成し、その中に行を挿入しています。残念ながら、挿入したばかりの行を選択できません。

<?php

const CACHE_SCHEMA = <<<EOD

CREATE TABLE test ( column1 TINYTEXT,
                    column2 MEDIUMTEXT,
                    column3 INT,
                    column4 INT )

EOD;

$db = new PDO('sqlite::memory:');

$statement = $db->query(CACHE_SCHEMA);
$statement->execute();

$statement = $db->prepare('INSERT INTO test (column1, column2, column3, column4) VALUES (?,?,?,?)');
$statement->execute(array('a', 'b', 123, 2));

$statement = $db->prepare('SELECT column2 FROM test WHERE column1 = ? AND column3 + column4 >= ?');
$statement->execute(array('a', 124));

var_dump($statement->fetch(PDO::FETCH_ASSOC));

?>



出力:bool(false)


ご覧のとおり、'SELECT'ステートメントは挿入した行を返していません。


挿入した行の'column3''column4'を追加すると、125が生成されます。
ステートメントの'WHERE'句は次のようになります。


'WHERE column1 = "a" AND column3 + column4 >= 124'


パラメータが入力されると。
誤解しない限り、125 >= 124
答え
これを理解するには少し考える必要がありましたが、the documentation for PDOStatement::execute()によると、


「すべての値はPDO::PARAM_STRとして扱われます。」


だから私は変更する必要があります:

$statement->execute(array('a', 124));


に:

$statement->bindValue(1, 'a');
$statement->bindValue(2, 124, PDO::PARAM_INT);
$statement->execute();


...そして最後のパラメータに文字列値をバインドする代わりに、整数をバインドします。
関連記事

php - PDOでクエリを作成しますか?

php - アスタリスクAGI:グローバル変数の値を取得または設定する方法

php - Doctrine 2.0でロードしない遅延ロードプロパティ

php - perl正規表現を使用してphpタグを閉じるストリップ

php - ユーザーがMP3を直接ダウンロードできないようにする方法

php - PHP警告を修正する方法:file_get_contents?

php - Smarty 3とspl_autoload_register

php - drupal urlでカスタム宛先を適切に設定する方法

php - テーブルからネストされたカテゴリを削除する

php - jQuery Mobile-IEキャッシュの問題