(Я сделаю новый ответ, потому что я неправильно понял вопрос в другом.)
По умолчанию PDO автоматически игнорирует ошибки и возвращает пустые результаты.Это могло бы объяснить # 2.Например, если ваша таблица действительно называется «таблицей» и вы не заключили ее в кавычки (table
- зарезервированное ключевое слово).Включите отчеты об ошибках, чтобы увидеть, так ли это (см. Ниже).
В # 3 все строки могут быть возвращены, потому что условие тавтологическое: foo = foo
или :foo = :foo
или 'foo' = :foo
.
Вот полная программа, которая работает правильно для меня.Если это не работает для вас, это, вероятно, ошибка в определенной версии PHP, PDO или MySQL.
<?php
$db = new PDO('mysql:host=localhost;dbname=test', 'user', 'password');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$foo = 'bar';
$stmt_1 = $db->prepare("SELECT * FROM `table` WHERE foo = '$foo'");
$stmt_1->execute();
$results_1 = $stmt_1->fetchAll();
$stmt_2 = $db->prepare("SELECT * FROM `table` WHERE foo = ?");
$stmt_2->bindParam(1, $foo, PDO::PARAM_STR);
$stmt_2->execute();
$results_2 = $stmt_2->fetchAll();
$stmt_3 = $db->prepare("SELECT * FROM `table` WHERE foo = :foo");
$stmt_3->bindParam("foo", $foo, PDO::PARAM_STR);
$stmt_3->execute();
$results_3 = $stmt_3->fetchAll();
print_r($results_1);
print_r($results_2);
print_r($results_3);