2012-04-17 123 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