我不确切地知道如何把那些必要的代码显示给我使用mysql中的生日的年龄..总是给我1 ..你能告诉我我的错误在哪里吗?
这是代码:
<?php
$query = "SELECT DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(f_nacimiento, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(f_nacimiento, '00-%m-%d')) AS age from PACIENTES where id_paciente = $_GET[id_paciente]";
echo print $age; ?>
在db中,行f_nacimiento是日期类型(yyyy-mm-dd)
最好的问候!答案 0 :(得分:2)
结果只是“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编程的另外两个重要习惯:
重新评论,需要以年,月为单位显示年龄。这是我的第二次尝试(有趣的日子):
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;
答案 1 :(得分:0)
使用此查询,因为您正在使用pdo,请使用预准备语句
SELECT EXTRACT(YEAR FROM NOW()) - EXTRACT(YEAR FROM f_nacimiento) age FROM pacientes WHERE id_paciente = ?
和php
$dbh = new PDO(.....
$st = $dbh->prepare($query);
$st->execute([(string)$_GET['id_paciente']]);
var_dump($st->fetchAll());
答案 2 :(得分:-1)
您需要在字符串中正确使用$ _GET变量。
$query = "SELECT DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(f_nacimiento, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(f_nacimiento, '00-%m-%d')) AS age from PACIENTES where id_paciente = $_GET[id_paciente]";
为:
$query = "SELECT DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(f_nacimiento, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(f_nacimiento, '00-%m-%d')) AS age from PACIENTES where id_paciente = \"" . $_GET['id_paciente'] . "\"";
// Do the query....