2013-02-18 98 views
1

反覆出現的問題我有這個問題我與bind_param有,我不知道發生了什麼事情不對:與bind_param,無效的對象或資源

<?php 
$mysqli = new mysqli("$host","$user","$pass","$db"); 
if(isset($_GET['catName'])) { 
    $category = "%" . $_GET['catName'] . "%"; 
} 

//setup query 
$catSearch = $mysqli->stmt_init(); 

//search values 
$catQuery = "SELECT lister_id, 
      logo_file_name, 
      listing_name, 
      street_address, 
      city, 
      state, 
      zip 

     FROM listers 

     INNER JOIN listings 

     ON listers.lister_id = listings.lister_id 

     WHERE listings.listing_category LIKE ?"; 

$catSearch->prepare($catQuery); 
$catSearch->bind_param('s', $category); 
$catSearch->bind_result($id, $imgfile, $name, $address, $city, $state, $zip); 
$catSearch->execute(); 
$catSearch->store_result(); 
$mainRows = $catSearch->num_rows(); 
?> 

我得到的警告是:

Warning: mysqli_stmt::bind_param(): invalid object or resource mysqli_stmt in C:\wamp\www\RP\catSearch.php on line 29 

什麼是殺死我的是這個確切的語法就像它一樣把7或8個其他文件放在一起,但由於某種原因,這個文件不斷被打破。我檢查了每個表格,它們都很好(這是上次發生這種問題的原因)。我確信我在一切之前宣佈了我的stmt_init()(之前也有問題)。我已經在整張表格上印上了echo $_GET['catName'],所以它正在通過(曾經有過一次問題)。

而且,更抽象的問題,但我一直在使用bind_param是爲了防止SQL注入的最佳方式告知;這真的是我需要的所有安全嗎? (我的意思是,在理性的情況下,我確信有更多的安全性,但這是一個小黃頁類型的網站)。

+1

echo $ mysqli-> error'告訴你什麼? – 2013-02-18 01:15:19

+0

我不熟悉'mysqli',因爲我更喜歡'PDO',但是不應該使用從'prepare'返回的對象作爲stmt對象嗎? – 2013-02-18 01:18:12

+0

@ExplosionPills如果你首先調用'stmt_init()',這是不正確的方法。它似乎並沒有經常使用。 – 2013-02-18 01:19:08

回答

0

好了,感謝@michaelberkoski,並從另一頁的一點幫助在這裏,我想通了這個問題。因爲這兩個表包含lister_id,它拋出一個錯誤,我改變了我的查詢:

$catQuery = "SELECT listers.lister_id, 
      listers.logo_file_name, 
      listers.listing_name, 
      listers.street_address, 
      listers.city, 
      listers.state, 
      listers.zip 

     FROM listers 

     INNER JOIN listings 

     ON listers.lister_id = listings.lister_id 

     WHERE listings.listing_category LIKE ?"; 

我在哪裏添加的表。 (listers。)到我正在檢索的每個列。像魅力一樣工作。

+0

啊,我正在鍵入一個答案。我不會打擾。 – 2013-02-18 01:32:52