2014-02-27 44 views
2

我对网络编程相当陌生,但我知道很多。我想提出一个私人的邮件系统,但我得到了一个错误:PHP/SQL - 类mysqli_result的对象无法转换为字符串

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>"; 
    } 
} 
?> 
+2

这行代码都没有问题,这是不是在这条线,你的问题是,也许在你所在的线路使用的地方使用$ check_conv – CodeBird

+0

那是什么错误? – poseidon

+0

好吧,没人能告诉你什么是错误的只是看到这行代码,周围没有魔术师,只是程序员:) – CodeBird

回答

4

尝试抓取您的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){ 
+0

谢谢运作良好。 – poseidon

1

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

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

+0

虽然我不打印它,但之后我正在检查行。 – poseidon

+0

我们如何知道这一点?我们看不到您的代码?你向我们展示了一行代码。 –

+0

将增加休息,一分钟。 – poseidon

1

这是你的问题。在这里,你去做一个查询并将其分配给$ 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有很多例子。

+0

谢谢提示,如果可以的话,会给你代表。 – poseidon

相关问题