【问题标题】:PHP/SQL - Object of class mysqli_result could not be converted to string [duplicate]PHP / SQL - 类mysqli_result的对象无法转换为字符串[重复]
【发布时间】:2014-03-31 13:34:27
【问题描述】:

我对网络编程还很陌生,但我知道很多。我正在制作一个私人消息系统,但出现错误:

Catchable fatal error: Object of class mysqli_result could not be converted to string in C:\xampp\htdocs\message\send.php on line 26

这是代码:

$check_conv=mysqli_query($con,"SELECT `hash` FROM `message_g` WHERE (`user_one`='$my_id' AND `user_two`='$user') OR (`user_one`='$user' AND `user_two`='$my_id')");

我做错了什么,我检查了数据库中有值。我也检查过,我到处使用 mysqli,而不是混合使用 mysql 和 mysqli。任何帮助将不胜感激。谢谢。

编辑:下面的完整代码:

<?php 
if(isset($_POST['submit'])){
$myusername=$_SESSION['myusername'];
$random=rand();
$my_id=mysqli_query($con,"SELECT `id` FROM `users` WHERE (`username`='$myusername')");
$user=$_GET['user'];
$check_conv=mysqli_query($con,"SELECT `hash` FROM `message_g` WHERE (`user_one`='$my_id' AND `user_two`='$user') OR (`user_one`='$user' AND `user_two`='$my_id')");
if(mysqli_num_rows($check_conv) == 1){
    echo "<p>Conversation Already Started!</p>";
} else {
    mysqli_query("INSERT INTO `message_g` (`user_one`, `user_two`, `hash`) VALUES ('$my_id','$user','$random')");
    echo "<p>Conversation Started!</p>";
    }
}
?>

【问题讨论】:

  • 这行代码没有问题,你的问题不在这一行,可能在你使用$check_conv的那一行
  • 好吧,没有人能告诉你看到这行代码出了什么问题,周围没有魔术师,只有程序员:)
  • 是的,但是错误是什么意思。
  • 你正在做一些试图将对象变成字符串的事情,你不能这样做。但我们不知道,因为您没有向我们展示出现问题的代码行。
  • 您不能将结果转换为整数,您必须获取结果。检查我的答案。

标签: php sql mysqli fatal-error


【解决方案1】:

mysqli_query 返回一个对象。您不能只打印对象。您需要阅读 mysqli 文档以了解如何处理 mysqli_query 对象的结果。

http://us1.php.net/manual/en/mysqli.query.php

【讨论】:

  • 我没有打印它,之后我正在检查行。
  • 我们怎么知道的?我们看不到您的代码?您向我们展示了一行代码。
  • 休息一分钟。
【解决方案2】:

这是你的问题。在这里,您进行查询并将其分配给 $my_id,认为您正在从列中获取实际值,但您没有。

$my_id=mysqli_query($con,"SELECT `id` FROM `users` WHERE (`username`='$myusername')");

然后您尝试在第二次调用中将其插入字符串:

$check_conv=mysqli_query($con,"SELECT `hash` FROM `message_g` WHERE (`user_one`='$my_id' AND `user_two`='$user') OR (`user_one`='$user' AND `user_two`='$my_id')");

为此,$my_id 必须是一个字符串,但它不是。它是一个对象。


另外,与您的问题无关,请注意,通过使用外部变量构建 SQL 语句,您将面临 SQL 注入攻击。此外,任何带有单引号的输入数据,就像“O'Malley”的名字一样,会炸毁你的 SQL 查询。请了解如何使用参数化查询(最好使用 PDO 模块)来保护您的 Web 应用程序。我的网站http://bobby-tables.com/php 有一些示例可以帮助您入门,this question 有很多详细示例。

【讨论】:

  • 感谢您的提示,如果可以的话,我会为您提供代表。
【解决方案3】:

尝试在查询中直接使用的地方获取您的 mysqli_result

$my_id_query=mysqli_query($con,"SELECT `id` FROM `users` WHERE (`username`='$myusername')");
//Fetch result 
$my_id_array=mysqli_fetch_assoc($my_id_query);
$my_id=$my_id_array['id'];
//Cast this into int to protect yourself against sql injection
$user=(int)$_GET['user'];
$check_conv=mysqli_query($con,"SELECT `hash` FROM `message_g` WHERE (`user_one`='$my_id' AND 
`user_two`='$user') OR (`user_one`='$user' AND `user_two`='$my_id')");
 if(mysqli_num_rows($check_conv) == 1){

【讨论】:

    猜你喜欢
    • 2019-03-19
    • 2022-01-05
    • 2021-07-06
    • 2011-03-16
    • 2016-06-17
    相关资源
    最近更新 更多