2014-03-19 91 views
-1

我似乎無法在代碼中發生什麼問題:PDO/OOP搜索引擎php

這是函數發生和執行的地方。這是來自不同的文件

public function search($title, $table) 
    { 

     $q = "SELECT * FROM $table WHERE (':title' LIKE '%".$title."%')"; 
     $stmt = $this->con->prepare($q); 
     $stmt->execute(array(':title' => $title)); 
     $result = $stmt->fetchAll(PDO::FETCH_ASSOC); 
     return $result; 
    } 

這部分應檢查和結果。不同的文件再次

if(isset($_POST['submit'])){ 
    $search = $_POST['search']; 
    $min_length = 2; 

    if(strlen($search) >= $min_length){ 

     $search = htmlspecialchars($search); 
     $results = $code->search($title, "book_info"); //the error is here* 

     if(mysql_num_rows($results) > 0){ // the error is here too** 

      while($results != $code->fetchAll()){ 
      echo "<table id=\"tablecolor\" class=\"echoname\" >"; 
      echo "<th><b>ID</b></th>"; 
      echo "<th><b>Title</b></th>"; 
      echo "<th><b>Author</b></th>"; 
      echo "<th><b>ISBN</b></th>"; 
      echo "<th><b>Publisher</b></th>"; 
      echo "<th><b>Language</b></th>"; 
      echo "<th><b>Genre</b></th>"; 
      echo "<th><b>Quantity</b></th>"; 
      echo "<pre>"; 
        echo "<tr>"; 
        echo "<td>".$id."</td>"; 
        echo "<td>".$title."</td>"; 
        echo "<td>".$author."</td>"; 
        echo "<td>".$isbn."</td>"; 
        echo "<td>".$publisher."</td>"; 
        echo "<td>".$language."</td>"; 
        echo "<td>".$genre."</td>"; 
        echo "<td><center>".$quantity."</center></td>"; 
        echo "</tr>";  
      echo "</pre>"; 
      echo "</table>"; 

      } 

     } 
     else{ 
      echo "No results"; 
     } 

    } 
    else{ 
     echo "Minimum length is ".$min_length; 
    } 
} 

執行

*Notice: Undefined variable: title in C:\wamp\www\unitato\web\user\user-search1.php on line 16 
**Warning: mysql_num_rows() expects parameter 1 to be resource, array given in C:\wamp\www\unitato\web\user\user-search1.php on line 18 

我想知道如何解決這個錯誤時,這是​​錯誤。

+1

你認爲'$ title'是從哪裏來的?它不存在,就像錯誤信息所說的那樣。爲什麼你在PDO結果上使用mysql_函數? – deceze

+0

噢耶對不起,我沒有意識到這一點。在PDO結果中使用msql_函數有什麼問題? – user3406220

+0

mysql_函數僅適用於由mysql_函數生成的值/變量。 PDO是一個完全不同的API。 – deceze

回答

0

你做錯了兩兩件事:

  • 第一:您正在嘗試當您使用PDO使用mysql_fetch_rows()。其中一個是針對mysql,另一個針對PDO。所以,它們是兩種完全不同的結構,所以不要混淆。

  • :你是假設所有SELECT語句將返回一定的價值,通過簡單地做fetchAll之後。

    *如果查詢不成功會怎麼樣? fetchAll()怎麼能給你帶來什麼?

如果要檢查你的SELECT語句返回您可以使用rowCount()方法的功能做到這一點的任何值。

public function search($title, $table) 
{ 
     try{ 
     $q = "SELECT * FROM $table WHERE title LIKE ?"; 
     $stmt = $this->con->prepare($q); 
     $stmt->execute(array("%$title%"); 
     }catch(PDOException $e){ 
     throw new Exception("ERROR:". $e->getMessage()); 
     } 
     if(!$stmt->rowCount()){ 
      return false; #this will return false if data isn't found. 
     } 
     $result = $stmt->fetchAll(PDO::FETCH_ASSOC); 
     return $result; 
} 

或代替mysql_fetch_rows之外,你的功能,您可以檢查做:

$results = $code->search($title, "book_info"); 
if($result){ 
//query is ok 
} 
+0

謝謝先生。它的工作原理,但它不會顯示結果..我想這個問題是在我的數據庫。我可以從這裏處理它。非常感謝你。 :D(y) – user3406220

+0

我編輯了答案。再次檢查腳本。很可能你要求mysql給你一個不存在的數據。 – samayo

+0

是的..現在很好..我的數據庫是空的..我沒有意識到。先生,再次謝謝你。 :) – user3406220

-1

試試這個代碼

public function search($title, $table) 
{ 

    $q = "SELECT * FROM $table WHERE title LIKE '%:title%'"; 
    $stmt = $this->con->prepare($q); 
    $stmt->execute(array(':title' => $title)); 
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC); 
    return $result; 
} 
0

一個適當版本

public function search($title) 
{ 
    $q = "SELECT * FROM table WHERE title LIKE ?"; 
    $stmt = $this->con->prepare($q); 
    $stmt->execute(array("%$title%")); 
    return $stmt->fetchAll(PDO::FETCH_ASSOC); 
} 

請注意,查詢中的表和字段名稱是硬編碼

+0

哈哈,你忘了'%%' – samayo

+0

順便說一句:我認爲你錯了,假設表/字段名稱應硬編碼。你從哪裏讀過的? – samayo