为什么这个SQL SELECT语句没有检索刚刚插入的行?

时间:2011-09-30 18:10:05

标签: 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

1 个答案:

答案 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();

...然后不是将字符串值绑定到最后一个参数,而是绑定一个整数。