可捕获的致命错误:类 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->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 的对象无法转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章
可捕获的致命错误:类 AppBundle\Entity\Categoria 的对象无法转换为字符串
致命错误:调用未定义的方法 mysqli_stmt::get_result()
可捕获的致命错误:类Proxies的对象 __ CG __ AppBundle Entity Modelo无法转换为字符串
symfony2 ContextErrorException:可捕获的致命错误:类 Proxies\__CG__\...\Entity\... 的对象无法转换为字符串