PHP PDO Query не читает значения привязки - PullRequest
0 голосов
/ 30 октября 2018

Поэтому я пытаюсь выполнить следующий SQL-запрос:

$stmt = $connect->query("SELECT `FID`,`StorageID`,`DestructionDate` FROM `files` WHERE `DestructionDate` < ':date'");
$stmt->bindValue(":date",$date);
$stmt->execute();

while ($row = $stmt->fetch()) {
$fid = $row['FID'];
echo  $fid . " ";
}

Приведенный выше код вернет все записи из файлов, он просто игнорирует оператор WHERE и, для ясности, когда я запускаю ту же инструкцию в phpMyAdmin, он работает просто отлично, фактически я даже пытался связать значение внутри сам запрос вот так

$stmt = $connect->query("SELECT FID,StorageID,DestructionDate FROM files WHERE DestructionDate < '$date'");

И запрос был выполнен правильно и дал мне только те записи, которые удовлетворяют условию WHERE, поэтому ошибка определенно содержится в строках bindValue () и execute ().

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

2 решения:

Во-первых:

$stmt = $connect->prepare("SELECT `FID`,`StorageID`,`DestructionDate` FROM `files` WHERE `DestructionDate` < :date");
$stmt->execute(array('date' => $date);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

Второе:

$stmt = $connect->prepare("SELECT `FID`,`StorageID`,`DestructionDate` FROM `files` WHERE `DestructionDate` < ?");
$stmt->execute(array($date));
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

В обоих случаях вам не нужно «заключать в кавычки» заменяемую строку (: date или?), Потому что PDO анализирует значение в нужном типе, соответствующем соответствующему столбцу.

0 голосов
/ 30 октября 2018

Из документов :

PDO::query - Выполняет инструкцию SQL, возвращая набор результатов в качестве объекта PDOStatement

Возможно, вы хотите PDO::prepare(), а затем PDOStatement::execute(). (Обычно нет необходимости мучительно связывать параметры по одному.)

Кроме того, у вас есть фиктивные кавычки вокруг заполнителя:

':date'

Вы заметите это, как только вы выполните оператор, потому что параметры не будут совпадать.

...