使用日期作为条件时MySQL查询无结果问题求助
解决MySQL日期条件查询无结果的问题
核心问题:日期值未加引号导致的语法错误
你的硬编码查询语句里,date = 2022-10-25 没有给日期加单引号,MySQL会把2022-10-25解析成数学运算(2022-10=2012,2012-25=1987),相当于你在查询date = 1987,而你的date字段是date类型,自然匹配不到任何结果。
修正后的硬编码查询语句
SELECT * FROM attendance WHERE grade = '4' AND date = '2022-10-25';
PHP代码中的问题及修正
你的PHP拼接的SQL语句存在两个明显问题:
- 日期变量
$date未加单引号,同样会触发上述的运算解析错误 - 直接拼接
$_POST参数存在严重SQL注入风险,同时字符串拼接的引号嵌套逻辑混乱
推荐使用预处理语句(安全且避免语法错误)
// 假设已建立PDO数据库连接 $pdo = new PDO('mysql:host=localhost;dbname=你的数据库名', '用户名', '密码'); $grade = $_POST['grade'][1]; $date = '2022-10-25'; // 替换为你实际获取的日期值 $stmt = $pdo->prepare("SELECT * FROM attendance WHERE grade = ? AND date = ?"); $stmt->execute([$grade, $date]); $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
如果一定要用字符串拼接(不推荐,风险高),至少要给日期加单引号,同时对用户输入做转义处理:
$grade = mysqli_real_escape_string($conn, $_POST['grade'][1]); $date = mysqli_real_escape_string($conn, $date); $sql = "SELECT * FROM attendance WHERE grade = '$grade' AND date = '$date'";
验证小技巧
先在MySQL客户端(比如MySQL Workbench、Navicat)执行加了引号的日期查询,确认能返回结果后,再同步到PHP代码中。
内容的提问来源于stack exchange,提问作者Fahaad Munir
相关产品推荐
相关产品推荐

