PHP PDO 查询未读取绑定值
PHP PDO Query isn't reading bind values
所以我正在尝试执行以下 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 . " ";
}
上面的代码将 return 文件中的所有记录,它根本忽略了 WHERE 语句,只是为了清楚起见,当我 运行 在 phpMyAdmin 上使用相同的语句时 运行很好,事实上我什至试过像这样在查询本身中绑定值
$stmt = $connect->query("SELECT FID,StorageID,DestructionDate FROM files WHERE DestructionDate < '$date'");
并且查询正确执行,只给了我满足WHERE条件的记录,所以错误肯定在bindValue()和execute()行。
来自docs:
PDO::query
— Executes an SQL statement, returning a result set as a PDOStatement object
您可能需要 PDO::prepare()
后跟 PDOStatement::execute()
。 (通常不需要痛苦地一个一个地绑定参数。)
此外,您在占位符周围使用了伪造的引号:
':date'
您会注意到,一旦您执行该语句,因为参数不匹配。
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);
在这两种情况下,您都不需要 'quote' 要替换的字符串(:date 或 ?),因为 PDO 会解析与要匹配的列对应的正确类型的值。
所以我正在尝试执行以下 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 . " ";
}
上面的代码将 return 文件中的所有记录,它根本忽略了 WHERE 语句,只是为了清楚起见,当我 运行 在 phpMyAdmin 上使用相同的语句时 运行很好,事实上我什至试过像这样在查询本身中绑定值
$stmt = $connect->query("SELECT FID,StorageID,DestructionDate FROM files WHERE DestructionDate < '$date'");
并且查询正确执行,只给了我满足WHERE条件的记录,所以错误肯定在bindValue()和execute()行。
来自docs:
PDO::query
— Executes an SQL statement, returning a result set as a PDOStatement object
您可能需要 PDO::prepare()
后跟 PDOStatement::execute()
。 (通常不需要痛苦地一个一个地绑定参数。)
此外,您在占位符周围使用了伪造的引号:
':date'
您会注意到,一旦您执行该语句,因为参数不匹配。
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);
在这两种情况下,您都不需要 'quote' 要替换的字符串(:date 或 ?),因为 PDO 会解析与要匹配的列对应的正确类型的值。