2014-07-23 59 views
0

我從數據庫檢索數據時遇到了問題。所以我有一個有搜索框的頁面。用戶鍵入商品編號,然後重定向到單個商品頁面,並使用表單轉移該編號。然後腳本選擇該數字,只顯示結果數字等於結果數字的結果。 問題:如果該號碼只包含數字,則一切正常。如果我們添加字母它會發送到「PHP致命錯誤:調用一個非對象的成員函數execute()」。在數據庫中,我將它設置爲TEXT,而不是NUMBER。PHP - 使用MySQL檢索數據

這裏是一個單一商品頁面的代碼:

所以首先它得到這個數字從頂部URL(part.php部分號碼= WB20K10023 +?):

$item_number = $_GET['item_number']; 
$allItems = fetchAllItems($item_number); 

然後運行這個功能:

function fetchAllItems($item_number) {  
     global $mysqli,$db_table_prefix; 
     $stmt = $mysqli->prepare("SELECT    
      * 
      FROM ".$db_table_prefix."items 
      WHERE 
      item_number = $item_number 
      LIMIT 1 
      "); 
     $stmt->execute(); // <- This line shows in an error_log 
     $stmt->bind_result($id); 
     while ($stmt->fetch()){ 
      $row[] = array('id' => $id); 
     } 
     $stmt->close(); 
     return ($row);  
    } 
+0

請注意,沒有ORDER BY的LIMIT是非常沒有意義的。除此之外,你只是缺少一對引號 – Strawberry

+3

'partNumber ='$ partNumber''。字符串需要用引號引起來。既然你正在使用'mysqli'和'prepare()',你應該使用佔位符'partNumber =?'和'$ stmt-> bind_param('s',$ partNumber);'。 – Sean

+0

謝謝,修正了它。 – Art

回答

-1

如果MySQL表的部分號碼字段是字符串/文本/ varchar數據類型,然後在查詢字符串,你應該寫partNumber = '$partNumber',而不是寫partNumber = $partNumber

+0

雖然這可能「解決」了問題,但這是一種導致SQL注入的糟糕方法。 OP應該使用佔位符,尤其是考慮到代碼*已經*使用MySQLi。 – user2864740