我最近了解了预处理语句的重要性,因此我着手将所有现有的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的新手,我确信我做了一些愚蠢/不合逻辑的事情。
任何人都可以看到我的错误/帮助我朝着正确的方向前进吗?
答案 0 :(得分:4)
如果您要连接,请在数组中执行,而不是查询,并为每个变量使用单独的占位符:
$stmt = $pdo->prepare("SELECT * FROM people WHERE `dob` BETWEEN :theyearbegin AND :theyearend");
$stmt->execute([':theyearbegin' => $theyear.'-01-01', ':theyearend' => $theyear.'-12-31']);
请注意,我已从查询中的占位符中删除了引号。您在准备查询的占位符中进行的任何连接都应在查询本身之外完成,包括使用LIKE
的查询。
答案 1 :(得分:2)
尝试更改
':theyear-01-01'
要
CONCAT(:theyear, '-01-01')
如果未设置仿真,则需要两个不同的变量:theyear1和:theyear2 f.e。