结果只是“1”,因为您选择的是布尔表达式。
也就是说,X < Y
只返回 0 或 1。
在 MySQL 中有一种更简单的方法来进行日期运算。DATEDIFF()函数返回两个日期之间的天数。
$query = "SELECT FLOOR(DATEDIFF(NOW(), f_nacimiento) / 365.25) AS age
FROM PACIENTES
WHERE id_paciente = ?";
if (($stmt = $pdo->prepare($query)) === false ) {
die(print_r($pdo->errorInfo(), true));
}
$id_paciente = $_GET["id_paciente"];
if ($stmt->execute(array($id_paciente)) === false) {
die(print_r($stmt->errorInfo(), true));
}
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo $row["age"] . "\n";
}
我测试的表如下:
CREATE TABLE `PACIENTES` (
`id_paciente` int(11) NOT NULL AUTO_INCREMENT,
`f_nacimiento` date DEFAULT NULL,
PRIMARY KEY (`id_paciente`)
) ENGINE=InnoDB;
PS:上面的示例代码展示了 PDO 编程的另外两个重要习惯:
- 使用查询参数,不要将字符串直接插入 SQL。
- 检查从 prepare() 和 execute() 返回的错误状态。
重新发表您的评论,需要以年、月为单位显示年龄。这是我的第二次尝试(为了好玩而投入了几天):
SELECT TIMESTAMPDIFF(YEAR
, f_nacimiento
, NOW()
) AS Years,
TIMESTAMPDIFF(MONTH
, f_nacimiento
+ INTERVAL TIMESTAMPDIFF(YEAR, f_nacimiento, NOW()) YEAR
, NOW()
) AS Months,
TIMESTAMPDIFF(DAY
, f_nacimiento
+ INTERVAL TIMESTAMPDIFF(MONTH, f_nacimiento, NOW()) MONTH
, NOW()
) AS Days
FROM PACIENTES
WHERE id_paciente = 1;