我正在创建一个内存中的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
。答案 0 :(得分:2)
根据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();
...然后不是将字符串值绑定到最后一个参数,而是绑定一个整数。