Почему этот оператор SQL SELECT не возвращает строку, которую я только что вставил? - PullRequest
2 голосов
/ 30 сентября 2011

Я создаю базу данных 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 Ответ

2 голосов
/ 30 сентября 2011

Потребовалось немного времени, чтобы понять это, но согласно документации для PDOStatement::execute():

"Все значения обрабатываются как PDO :: PARAM_STR."

Так что мне нужно изменить:

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

до:

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

... и тогда вместо привязки строкового значения к последнему параметру оно будет связывать целое число.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...