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

Posted

技术标签:

【中文标题】可捕获的致命错误:类 mysqli_stmt 的对象无法转换为字符串【英文标题】:Catchable fatal error: Object of class mysqli_stmt could not be converted to string 【发布时间】:2014-02-07 19:09:06 【问题描述】:

我是 php OOP 的新手,所以这个问题一定很愚蠢。 我无法通过 PHP 创建 SQL 查询。我已经阅读了很多次代码,但我找不到任何差异,甚至编辑器也没有显示任何错误。我正在使用 PHP 5.5.13、mysql 5.5.24 和 APCHE Server 2.2.22。

以下是代码:

Test_signup.php

<!DOCTYPE html>
    <html>
        <head>
            <title>
            Test Sign Up
            </title>
        </head>
        <body>
                <form action = "Signup.php" method = "POST" name = "test_signup">
                Full Name: <input type = "text" name = 'full_name'>
                User Name: <input type = 'text' name = 'user_name'>
                Email: <input type = 'text' name = 'email_add'>
                <input type = "submit" name = "submit">
            </form>

        </body>
    </html>

现在来到 Signup.php

<?php
$con = new mysqli('localhost', 'root', '', 'my_database');
      if ($con->connect_error)
      
        echo 'Failed to connect' . $con->connect_error;
      
      else
      
        echo 'Connected';
        $stmt_chk_email = $con->prepare('SELECT * FROM `user_information` WHERE `Email` = ?');
        $stmt_chk_email->bind_param('s', $_POST['email_add']);
        echo $stmt_chk_email;
?>

尝试运行此代码时,我收到错误消息:

mysqli_stmt 类的对象无法转换为字符串

当然,原始查询比此处发布的要大得多。我已经编辑了查询的后面部分,因为我发现问题存在于 SQL“SELECT”语句中,但我无法弄清楚。请帮助我。 谢谢你。

【问题讨论】:

看起来您在 echo $stmt_chk_email; 之后缺少一个右大括号 你确定你可以echo这样的东西吗? 您还缺少execute() - 您可能打算使用$stmt_chk_email-&gt;execute(); 而不是echo $stmt_chk_email; @Fred -ii- 实际上我并没有在编辑器中忘记它。我只是忘了把它贴在这里。任何方式,感谢您的回复。 【参考方案1】:

你不能回应这个

echo $stmt_chk_email;

你可能想回应这个

     $stmt_chk_email = $con->prepare('SELECT column1 ,column2,... FROM `user_information` WHERE `Email` = ?');
     $stmt_chk_email->execute();
     $stmt_chk_email->store_result();
     $stmt_chk_email->bind_result($column1 ,$column2,.....);
     $stmt_chk_email->fetch();
  echo $column1;
  echo $column2 ;
  .....

【讨论】:

那么代码怎么知道“?”值将通过 POST 方法导出?我的意思是问上面的代码并没有说明电子邮件将来自用户的表单。【参考方案2】:
        $stmt_chk_email = $con->prepare('SELECT `column` FROM `user_information` WHERE `Email` = ?');
        $stmt_chk_email->bind_param('s', $_POST['email_add']);
        $stmt_chk_email->execute();
        $stmt_chk_emeil->store_result();
        $stmt_chk_email->bind_result($check_email);
        $stmt_chk_email->fetch();
        echo $check_email;

    $stmt_chk_email = $con->prepare('SELECT * FROM `user_information` WHERE `Email` = ?');
    $stmt_chk_email->bind_param('s', $_POST['email_add']);
    $stmt_chk_email->execute();

    $result = $stmt_chk_email->get_result();

    if($result->num_rows == 1)
    
         $result = $result->fetch_array();
         echo $result['column_name'];
    

【讨论】:

以上是关于可捕获的致命错误:类 mysqli_stmt 的对象无法转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章

mysqli_stmt 类的对象在执行时无法转换为字符串

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

致命错误:调用未定义的方法 mysqli_stmt::get_result()

可捕获的致命错误:类Proxies的对象 __ CG __ AppBundle Entity Modelo无法转换为字符串

symfony2 ContextErrorException:可捕获的致命错误:类 Proxies\__CG__\...\Entity\... 的对象无法转换为字符串

可捕获致命错误的 FindAll() 结果:DateTime 类的对象无法转换为字符串