PHP查询1980-1990年出生客户信息失败,寻求技术协助
问题排查与修复方案
我帮你梳理下代码里的几个关键问题,修复后就能正常查询1980-1990年出生的客户信息了:
1. 语法错误:缺少分号
你的数据库连接语句末尾漏了分号,这会直接导致PHP解析失败:
// 原错误代码 $conn = new mysqli($servername, $username, $password, $dbname) // 修复后 $conn = new mysqli($servername, $username, $password, $dbname);
2. SQL逻辑错误:条件写反了
你当前的SQL条件是dogumtarih<'1980-01-01' and dogumtarih>'1990-01-01',这意味着要找既早于1980年又晚于1990年的记录,逻辑完全矛盾,不可能查到数据。要查询1980到1990年出生的客户,应该调整为:
SELECT * FROM musteri WHERE dogumtarih >= '1980-01-01' AND dogumtarih <= '1990-12-31'
或者用BETWEEN简化写法,可读性更强:
SELECT * FROM musteri WHERE dogumtarih BETWEEN '1980-01-01' AND '1990-12-31'
3. 日期格式兼容性检查
如果数据库中dogumtarih字段不是DATE/DATETIME类型,而是字符串类型,要确保存储的日期格式是YYYY-MM-DD,否则SQL的日期比较会失效。如果存储格式不一致(比如是DD/MM/YYYY),需要先转换格式再查询:
SELECT * FROM musteri WHERE STR_TO_DATE(dogumtarih, '%d/%m/%Y') BETWEEN '1980-01-01' AND '1990-12-31'
完整修复后的代码
<?php $servername = "localhost"; $username = "root"; $password = ""; $dbname = "company"; $conn = new mysqli($servername, $username, $password, $dbname); // 补充分号 if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } // 修正SQL逻辑 $sql = "SELECT * FROM musteri WHERE dogumtarih BETWEEN '1980-01-01' AND '1990-12-31'"; $result = $conn->query($sql); // 添加结果输出,方便验证查询效果 if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { echo "ID: " . $row["id"]. " - 姓名: " . $row["ad"]. " - 生日: " . $row["dogumtarih"]. "<br>"; } } else { echo "0 条匹配记录"; } $conn->close(); ?>
内容的提问来源于stack exchange,提问作者Cugurel
相关产品推荐
相关产品推荐

