2012-05-24 199 views
5

我的目標是能夠獲得一個變量(使用php)並在準備好的語句(使用mysqli)中使用它,然後使用fetch_assoc。由於某些原因,這段代碼不會工作(沒有錯誤)。我rtm,我還沒有發現任何結合fetch_assoc和預先準備好的語句,所以我不確定是否有可能。任何幫助得到這個工作是讚賞,這裏是我的代碼目前。mysqli用fetch_assoc準備好的語句

$where = $_GET['section']; 
      $mysqli = mysqli_connect("localhost", "root", "","test"); 

      if($stmt = mysqli_prepare($mysqli,"SELECT title, img, active, price FROM ? ORDER by ID limit 5 ")){ 
       mysqli_stmt_bind_param($stmt, 's', $where); 
       mysqli_stmt_execute($mysqli); 
       mysqli_stmt_fetch($mysqli); 
       while($row = mysqli_fetch_assoc($stmt)){ 
        if($row['active']=="yes"){ 
         echo 'the rest of my stuff goes here'; 
+0

動態表選擇通常是設計不良的指示 –

回答

5

mysqli->prepare PHP網站頁面(重點加入到最相關的部分):

注:

的標記只在SQL語句中某些地方是合法的。對於 例如,它們被允許在VALUES()的INSERT語句的 列表(以指定的行列的值),或者在在與列 比較WHERE子句指定一個比較值。

然而,他們不允許標識符(如表或列 名),在由一個 SELECT語句返回名稱的列),或者指定的兩個操作數的選擇列表二元運算符 ,例如=等號。後者的限制是必要的,因爲 不可能確定參數類型。通常, 參數僅在數據操縱語言(DML) 語句中合法,而不在數據定義語言(DDL)語句中合法。

假設你可以通過這個問題,你使用mysqli是有點困惑。你正確地綁定你的參數並執行,但是你混合了兩種不同的方式來獲得你的結果。無論是

  1. 使用mysqli_stmt_get_result獲取的結果集,然後用mysqli_fetch_assoc上,或
  2. 綁定你的結果與mysqli_stmt_bind_result,然後用mysqli_stmt_fetch下一個結果集提取到您的綁定變量。 (通常你會在結果重複使用類似while(mysqli_stmt_fetch($stmt)){ //do stuff here }
+0

我看,謝謝我想我會重新設計我的數據庫然後 – PinheadLarry

+0

@PinheadLarry好吧,我已經添加了一些關於使用準備好的語句,因爲您在示例代碼中的使用看起來不太正確。 – Gareth

-1

另一種方式的風格,我們可以在下面寫:

$mysqli=new mysqli("host","user","pass","db"); 
$stmt = $mysqli->prepare($query); 
$stmt->bind_param('s', $variable); 
$stmt->execute(); 
$result = $stmt->get_result(); 
while($row = $result->fetch_assoc()){ 
.... 
}