2013-07-26 210 views
2

我正在從'PHP和MySQL web dev'學習PHP和MySQL。目前,我在查找數據庫結果時遇到困難。這裏是代碼:爲什麼不是這個查詢返回一個對象?

<body> 
    <?php 
     $searchtype = $_POST['searchtype']; 
     $seachterm = trim($_POST['searchterm']); 

     if(!$searchtype || !$seachterm){ 
      echo "You did not enter all the details. Bye"; 
      exit; 
     } 

     if(!get_magic_quotes_gpc()){ 
      $searchtype = addslashes($searchtype); 
      $seachterm = addslashes($seachterm); 
     } 

     @ $db = new mysqli('localhost', 'bookorama', 'bookorama123', 'books'); 

     if(mysqli_connect_errno()){ 
      echo "Sorry Could not connect to db"; 
      exit; 
     } 

     $query = "select * from books where".$searchtype."like '%".$seachterm."%'"; 

     $result = $db -> query($query); 

     $num_of_results = $result->num_rows; // Line 47 

     echo "Num of books found is ".$num_of_results." "; 

     for($i = 0; $i < $num_of_results; $i++){ 
      $row = $result -> fetch_assoc(); 
      echo "<p><strong>".($i+1).". Title: "; 
      echo htmlspecialchars(stripslashes($row['title'])); 
      echo "</strong><br />Author: "; 
      echo stripslashes($row['author']); 
      echo "<br />ISBN: "; 
      echo stripslashes($row['isbn']); 
      echo "<br />Price: "; 
      echo stripslashes($row['price']); 
      echo "</p>"; 
     } 

     $result->free(); 
     $db -> close(); 
    ?> 
</body> 

當我運行上面的代碼,這是我得到的錯誤。

Notice: Trying to get property of non-object in /opt/lampp/htdocs/xampp/php/php_crash/phptomysql/connect.php on line 47 
Num of books found is 
Fatal error: Call to a member function free() on a non-object in /opt/lampp/htdocs/xampp/php/php_crash/phptomysql/connect.php on line 64 

我在做什麼錯了?

回答

2

您的SQL查詢中可能有錯誤,而$resultfalse而不是結果對象。

我想這可能是因爲你在查詢中缺少一些空格。這條線:

$query = "select * from books where".$searchtype."like '%".$seachterm."%'"; 

應該是這樣的:

$_POST['searchtype']; 
$_POST['searchterm']; 
+0

哦,真是太愚蠢了。非常感謝。得到它了。 MySQL需要在其關鍵字和變量字符串之間有空格。可能是一個錯字。無論如何感謝您的注意。 –

+0

是的,我當然會。 SO需要5分鐘才能接受。 –

1

你不檢查,以確保$result是:

$query = "SELECT * FROM books WHERE '" .$searchtype. "' LIKE '%".$seachterm."%'"; 

如果我們知道的值,這將有助於你認爲它是什麼。您的查詢很可能出現問題,並且$db->query()的返回值爲false。檢查確保你的查詢真正起作用是一個好主意。

嘗試使用此代碼:現在

$result = $db->query($query); 
if ($result === false) { 
     // Query failed - we can't continue 
     die('My query failed, I want to be a teapot instead.'); 
} 

// Now it's safe to operate on $result, deal with a successful query, but no results 
if ($result->num_rows == 0) { 
     echo 'no results found.'; 
     // display any other output, search again? 
     exit; 
} 

// At this point you have results to display 

,至於爲什麼你的查詢失敗,看看這部分密切:

"select * from books where".$searchtype."like '%" 

你需要一些空間。如果$searchtype是「富」,你的查詢將實實在在地擴大到:

select * from books wherefoolike 

嘗試,而不是:

"select * from books where ".$searchtype." like '%" 

通知後「其中」之前「喜歡」的空間?這應該可以解決它。

我不會過多地關注確保您的查詢已妥善準備好以確保安全,您的書應該進入該階段 - 但請記住。

+0

謝謝,我將從現在開始實施這些最佳實踐。 –

相關問題