2014-02-27 136 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

相關問題