2012-04-17 90 views
1

是否有可能用一備的MySQL查詢中的PHP變量,如:MySQL中使用變量準備語句

$stmt = $mysqli->prepare("UPDATE table SET $variable_field = ? WHERE field = ?"); 

它被訂購系統中使用 - 比如,我有一個存儲推車會話內容。直到最後,我不知道訂購的物品總數。所以說,一個客戶的訂單10個項目 - 我需要將這些值插入到ITEM_1,ITEM_2,ITEM_3等

我想什麼來實現:

<<connect to DB>> 
$x = 0; 
while($x < count($order_contents)) { 
    $stmt = $mysqli->prepare("UPDATE table SET item_$x = ? WHERE field = ?"); 
    $stmt->bind_param("ss", $order_contents[$x], $order_number); 
    $stmt->execute(); 
    $x++; 
} 
<<close DB connection>> 

沿着這些線路差不多的東西。問題是,我看不到它允許我直接在查詢中指定PHP變量。任何幫助或建議?

+0

你試過了嗎?你有什麼錯誤嗎?順便說一句,如果你開始在任何表中有像item_1,item_2這樣的列,那麼你可能需要重新考慮你的模式。 – liquorvicar 2012-04-17 17:45:36

+0

它似乎在工作......如果item_1,item_2等錯誤 - 您可能會提出什麼建議? – 2012-04-18 13:08:11

+1

訂單明細單(訂單編號,日期,客戶編號等)和一個表格(訂單編號,訂單編號,商品詳細信息等)。 Order.order_Id將是主鍵,items.order_id將引用該鍵。通過這種方式,每個訂單都可以有1..n個訂單項,並且您無需爲每個訂單項定義新的列。您應該閱讀數據庫設計和規範化。 – liquorvicar 2012-04-18 14:04:30

回答

1
$x = 0; 
while($x < count($order_contents)) { 
    $x++; 
    $stmt = $mysqli->prepare('UPDATE table SET item_'.$x.' = ? WHERE field = ?'); 
    $stmt->bind_param("ss", $order_contents[$x], $order_number); 
    $stmt->execute(); 
} 

我也感動了$x++到循環的開始,因爲你要開始item_1