我最近了解到准备语句的重要性,所以我着手将所有现有的 mysqli 查询更改为 PDO 查询。
我有一个名为“people”的表,其中包含名为 name
和 dob
(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/