You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SELECT执行报错仅显示SQL无详情,INSERT同逻辑代码却正常运行

问题分析与解决方案

嘿,我一眼就瞅出你代码里的问题啦——SELECT语句的成功判断逻辑写错了!

核心原因

mysqli的query()方法执行不同SQL语句时返回值不一样:

  • 对于INSERT/UPDATE/DELETE这类不返回结果集的语句,执行成功会返回布尔值TRUE,失败返回FALSE,所以你原来的判断逻辑对这些语句是有效的。
  • 但对于SELECT这类需要返回结果的语句,执行成功时会返回一个**mysqli_result对象**,而不是TRUE!所以你写的if ($conn->query($sql) === TRUE)永远不会成立,直接跳进了else分支,让你误以为查询报错了,但其实查询很可能是成功的。

修正后的代码

把判断逻辑改成检查返回值是否为FALSE(只有报错时才会返回FALSE),成功的话就处理结果集:

<?php 
$servername = "localhost"; 
$username = "root"; 
$password = ""; 
$dbname = "nny_gamerrum"; 
// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
$sql = "SELECT email FROM booking;"; 
$result = $conn->query($sql);
// 检查是否查询失败
if ($result === FALSE) { 
    echo "Error: " . $sql . "<br>" . $conn->error; 
} else {
    // 查询成功,处理结果集
    echo 'Successfull<br>';
    // 比如遍历输出所有email
    while($row = $result->fetch_assoc()) {
        echo "Email: " . $row["email"] . "<br>";
    }
    // 释放结果集
    $result->free();
} 
$conn->close();
?>

额外调试小技巧

如果不确定返回值是什么,可以在query()之后加一行var_dump($result);,看看实际返回的是结果集对象还是FALSE,这样能快速定位问题。

内容的提问来源于stack exchange,提问作者Chutney

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:57:17