mysqli_stmt 类的对象在执行时无法转换为字符串
Posted
技术标签:
【中文标题】mysqli_stmt 类的对象在执行时无法转换为字符串【英文标题】:Object of class mysqli_stmt could not be converted to string on execute 【发布时间】:2018-05-16 05:12:16 【问题描述】:错误:
php 可捕获的致命错误:不能是类 mysqli_stmt 的对象 在第 33 行转换为 common.php 中的字符串
我知道这个标题有很多主题,但我在第 33 行阅读了所有主题,但没有一个与我的代码相似:
if (!$sql->execute())
echo "Error: " . $sql . "<br>" . $sql->error; // --> this is line 33
这部分属于这个代码:
class User
public function getId()
global $connection;
$id = $_COOKIE['userid'];
$userid = $_COOKIE['auth'];
$sql = $connection->prepare("SELECT tel, hash FROM seller WHERE id = ?");
$sql->bind_param("s", $id);
if (!$sql->execute())
echo "Error: " . $sql . "<br>" . $sql->error;
$sql->bind_result($tel, $hash);
$sql->fetch();
$sql->close();
if(md5($hash) == $userid)
$result = $tel;
else
$result = 0;
return $result;
今天早上我突然遇到了这个错误,并且该代码之前有效。没有任何改变,我得到了这个错误。有什么想法吗?
这种错误的有趣之处在于,当我注释该行时,我会在另一个mysqli
执行时得到另一个类似的错误。为什么会这样?
我知道这个错误是什么意思,但直到今天,我没有改变任何东西,它只是回显执行错误。那为什么呢?
【问题讨论】:
echo "Error: " . $sql...
$sql(这是一个mysqli_stmt
对象)连接成一个字符串。这是做不到的,所以不要这样做
如果您在创建数据库连接之前设置mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT)
,您可以从MySQLi 获得更好的错误报告并避免检查其方法的返回值。这将导致它在错误时抛出异常
【参考方案1】:
正如 cmets 中所指出的,您试图将 mysqli_stmt
对象 ($sql
) 表示为字符串,这是不可能的。你可能想这样做:
$query = "SELECT tel, hash FROM seller WHERE id = ?";
$sql = $connection->prepare($query);
$sql->bind_param("s", $id);
if (!$sql->execute())
echo "Error: " . $query . "<br>" . $sql->error;
【讨论】:
错误:Error: Prepared statement needs to be re-prepared
我不熟悉那个错误。对此question 的回答可能会有所帮助。以上是关于mysqli_stmt 类的对象在执行时无法转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章
报错:使用 maatwebsite 导出到 excel 时,stdClass 类的对象无法转换为字符串
App\Mail\EmailGenerator 类的对象无法转换为字符串
WordPress:可捕获的致命错误:stdClass 类的对象无法转换为字符串
Wordpress 模板 - “可捕获的致命错误:__PHP_Incomplete_Class 类的对象无法转换为字符串”