PHP调用Database类connect方法报mysqli对象无法转字符串错误
报错原因
该报错由PHP双引号字符串的复杂变量解析规则导致:
在双引号包裹的字符串中直接书写对象链式属性调用$this->connection->connect_errno时,PHP只会解析第一层变量$this->connection,后续的->connect_errno会被识别为普通文本。此时PHP会尝试将$this->connection(mysqli类的实例对象)转换为字符串插入文本中,但mysqli对象默认没有定义__toString()方法,因此抛出「无法将mysqli对象转换为字符串」的致命错误。
你单独打印$this->connection->connect_errno可以得到int类型的错误码,也验证了属性本身的值是正常的,问题仅出在字符串解析阶段。
解决方法
只需修改exit语句中的字符串写法,将链式调用的属性用大括号{}包裹,明确告知PHP这是一个完整的变量表达式即可:
// 原错误写法 exit("<h1>Database connection error: $this->connection->connect_errno</h1>"); // 修正后写法 exit("<h1>Database connection error: {$this->connection->connect_errno}</h1>");
也可以使用另外两种等价的写法实现同样效果:
- 使用字符串拼接符拼接变量:
exit("<h1>Database connection error: " . $this->connection->connect_errno . "</h1>");
- 先将错误码赋值给单独变量再插入字符串:
$errCode = $this->connection->connect_errno; exit("<h1>Database connection error: $errCode</h1>");
额外优化提示
- 你代码中
$host属性写的localwhost是拼写错误,修改为localhost即可解决2002连接错误。 - 不建议使用
@符号抑制错误输出,会掩盖正常的报错信息,不利于问题排查。
内容的提问来源于stack exchange,提问作者luksio
相关产品推荐
相关产品推荐

