2

我不确切知道如何放置必要的代码来显示 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; ?>

在数据库中,f_nacimiento 行是日期类型(yyyy-mm-dd)

此致!

4

3 回答 3

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 编程的另外两个重要习惯:

  • 使用查询参数,不要将字符串直接插入 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;
于 2013-05-27T19:06:37.230 回答
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());
于 2013-05-27T19:11:20.000 回答
-1

You need to use the $_GET variable correctly in a string.

$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]";

to:

$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.... 
于 2013-05-27T18:54:38.227 回答