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 类的对象无法转换为字符串

可捕获的致命错误:WC_Cart 类的对象无法转换为字符串

Wordpress 模板 - “可捕获的致命错误:__PHP_Incomplete_Class 类的对象无法转换为字符串”

使用 mysqli_stmt 时 PhP 可捕获的致命错误