php - 使用 PDO 准备语句和特定年份的占位符,我无法回应任何结果

标签 php mysql mysqli pdo

我最近了解到准备语句的重要性,所以我着手将所有现有的 mysqli 查询更改为 PDO 查询。

我有一个名为“people”的表,其中包含名为 namedob (DATETIME) 的字段,其中的数据如下:

name:  Johnny
dob:  2016-12-06 18:30:00

我首先在 PHP 变量中提供年份,例如:

$theyear=2016;

然后,使用这个例子,我试图提取 2016 年有 dob 的人的所有名字并回应他们,如下所示,但它没有显示任何结果(而且有很多):

$stmt = $pdo->prepare("SELECT * FROM people WHERE `dob` BETWEEN ':theyear-01-01' AND ':theyear-12-31'");
$stmt->execute(['theyear' => $theyear]);
while ($row = $stmt->fetch()) {
    echo $row['name'] . "<br/>";
}

作为 PDO 的新手,我确定我做了一些愚蠢/不合逻辑的事情。

任何人都可以看到我的错误/帮助我朝着正确的方向前进吗?

最佳答案

如果您要连接,请在数组中执行,而不是在查询中执行,并为每个变量使用单独的占位符:

$stmt = $pdo->prepare("SELECT * FROM people WHERE `dob` BETWEEN :theyearbegin AND :theyearend");
$stmt->execute([':theyearbegin' => $theyear.'-01-01', ':theyearend' => $theyear.'-12-31']);

请注意,我已从查询中的占位符中删除引号。您为准备好的查询在占位符中进行的任何串联都应该在查询本身之外完成,包括您使用 LIKE 的查询。

关于php - 使用 PDO 准备语句和特定年份的占位符,我无法回应任何结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45194219/

相关文章:

mysql - 具有多个分隔符的 AWK

php - 如何在 PHP 中使用 while 循环按 ID 列出节中的数据?

PHP MySQLi 准备好的语句获取 - 第一行为空?

php - 从 php/MySql 中的特定列检索数据

javascript - 通过查询字符串传递变量 chop 加号

php - Javascript 比较数组中的字符串

php - 如何替换 utf8_general_ci 上的所有无效字符

php - 如何在mysql中存储以逗号分隔的文本

php - 我可以在 PHP 中混合使用 MySQL API 吗?

php - mysql 从 5.5 升级到 5.7 后的空查询