mysqli_connect()失败时需立即调用mysqli_connect_error()获取具体错误信息,如connection refused、access denied等,该函数无需有效连接资源即可安全调用。

mysqli_connect() 连接失败时怎么拿到具体错误信息
连接阶段出错,mysqli_connect() 本身不抛异常,返回 false,必须手动查 mysqli_connect_error() 才能看到真实报错。比如密码错、端口不通、主机不存在,这些都不会自动打印 SQL 相关错误,而是网络或权限层面的问题。
- 用
mysqli_connect()后立刻检查返回值,别跳过 - 出错时调用
mysqli_connect_error()获取字符串,它和mysqli_connect_errno()是配套的 - 注意:这个函数不依赖已建立的连接资源,即使连接失败也能安全调用
mysqli_query() 执行 SQL 报错后如何捕获详细信息
执行语句失败(比如字段不存在、语法错、主键冲突),mysqli_query() 返回 false,此时得靠连接资源对象查错——不是用全局函数,而是调用 mysqli_error($conn),其中 $conn 是有效的 mysqli 实例。
- 必须传入连接资源,写成
mysqli_error()(无参)会警告并返回空字符串 -
mysqli_errno($conn)可同步获取错误码,比如1054(Unknown column)、1062(Duplicate entry) - 如果用了面向对象风格(
$mysqli = new mysqli(...)),就用$mysqli->error和$mysqli->errno属性,更直接
PDO 模式下 SQL 错误信息怎么取才可靠
PDO 默认关闭异常模式,execute() 或 query() 失败只返回 false,不会抛 PDOException。想让错误信息自动冒出来,必须提前设置 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION。
- 没设异常模式时,得手动调
$pdo->errorInfo(),它返回数组:[SQLSTATE, 驱动码, 驱动消息],第三项才是人能看懂的 SQL 错误描述 -
$pdo->errorCode()只返回 SQLSTATE(如42S22),对排错帮助有限,别只依赖它 - 开启异常模式后,
try/catch捕获PDOException,其$e->getMessage()就是完整错误信息,包含 SQL 片段(取决于驱动和配置)
为什么 var_dump($stmt) 看不到错误,但 mysqli_error() 却为空
常见于预处理语句(mysqli_prepare() 成功但 mysqli_stmt_execute() 失败)。这时候错误属于语句句柄(mysqli_stmt),不是连接句柄,所以 mysqli_error($conn) 拿不到,必须用 mysqli_stmt_error($stmt)。
- 区分清楚:连接级错误走
mysqli_error($conn),语句级错误走mysqli_stmt_error($stmt) -
mysqli_stmt_errno($stmt)对应语句错误码,和mysqli_errno($conn)不互通 - PDO 的预处理也一样:错误在
$stmt->errorInfo(),不在$pdo->errorInfo()
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











