0

我有一张这样的桌子:

id     product_category     product_name     product_range     discount_amt
---------------------------------------------------------------------------
1      Post Card            4x6              5M to 9,999       0.007
2      Post Card            4x6              10M to 14,999     0.01
3      Post Card            4x6              15M to 19,999     0.013
4      Post Card            4x6              20M to 24,999     0.015
5      Post Card            4x6              Over 25M          0.019

我只是将 discount_amt 列调用到页面中,如下所示:

$pricediscountquery = mysql_query("SELECT * FROM pricing_discount") or die(mysql_error());
$i=0;
while($pricingdiscountrow = mysql_fetch_array( $pricediscountquery )) {
$pricingdiscountarray[$i++]=$pricingdiscountrow['discount_amt'];
}

我正在显示表单字段和预先填写在表单字段值中的折扣金额,如下所示:

<p>5M to 9,999: <input type="text" name="pc_4x6_5m_to_9999" value="<?php echo $pricingdiscountarray[0]; ?>" /></p>
<p>10M to 14,999: <input type="text" name="pc_4x6_10m_to_14999" value="<?php echo $pricingdiscountarray[1]; ?>" /></p>
<p>15M to 19,999: <input type="text" name="pc_4x6_15m_to_19999" value="<?php echo $pricingdiscountarray[2]; ?>" /></p>
<p>20M to 24,999: <input type="text" name="pc_4x6_20m_to_24999" value="<?php echo $pricingdiscountarray[3]; ?>" /></p>
<p>Over 25M: <input type="text" name="pc_4x6_over_25m" value="<?php echo $pricingdiscountarray[4]; ?>" /></p>

我正在创建这样的帖子变量:

$pc_4x6_5m_to_9999 = mysql_real_escape_string(htmlspecialchars($_POST['pc_4x6_5m_to_9999']));
$pc_4x6_10m_to_14999 = mysql_real_escape_string(htmlspecialchars($_POST['pc_4x6_10m_to_14999']));
$pc_4x6_15m_to_19999 = mysql_real_escape_string(htmlspecialchars($_POST['pc_4x6_15m_to_19999']));
$pc_4x6_20m_to_24999 = mysql_real_escape_string(htmlspecialchars($_POST['pc_4x6_20m_to_24999']));
$pc_4x6_over_25m = mysql_real_escape_string(htmlspecialchars($_POST['pc_4x6_over_25m']));

我正在尝试同时更新多行/记录,就在这样的 discount_amt 列中:

mysql_query("INSERT INTO pricing_discount (id,discount_amt) VALUES (1,$pc_4x6_5m_to_9999),(2,$pc_4x6_10m_to_14999),(3,$pc_4x6_15m_to_19999),(4,$pc_4x6_20m_to_24999),(5,$pc_4x6_over_25m) ON DUPLICATE KEY UPDATE discount_amt=VALUES(discount_amt); ") or die(mysql_error());

上面的一个不会在代码中产生错误,但会在网页上产生错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 '),(2,),(3,),(4,),(5,) ON DUPLICATE KEY UPDATE discount_amt=VALUES(discount_amt)' 附近使用正确的语法在第 1 行

也试过这个:

mysql_query("INSERT INTO pricing_discount (id,discount_amt) VALUES (1,'$pc_4x6_5m_to_9999'),(2,'$pc_4x6_10m_to_14999'),(3,'$pc_4x6_15m_to_19999'),(4,'$pc_4x6_20m_to_24999'),(5,'$pc_4x6_over_25m') ON DUPLICATE KEY UPDATE discount_amt=VALUES(discount_amt); ") or die(mysql_error());

这给了代码错误,所以我什至没有保存它并尝试运行它:

mysql_query("INSERT INTO pricing_discount (id,discount_amt) VALUES (1,"$pc_4x6_5m_to_9999"),(2,"$pc_4x6_10m_to_14999"),(3,"$pc_4x6_15m_to_19999"),(4,"$pc_4x6_20m_to_24999"),(5,"$pc_4x6_over_25m") ON DUPLICATE KEY UPDATE discount_amt=VALUES(discount_amt); ") or die(mysql_error());

这也给出了代码错误:

mysql_query("INSERT INTO pricing_discount (id,"discount_amt") VALUES (1,"$pc_4x6_5m_to_9999"),(2,"$pc_4x6_10m_to_14999"),(3,"$pc_4x6_15m_to_19999"),(4,"$pc_4x6_20m_to_24999"),(5,"$pc_4x6_over_25m") ON DUPLICATE KEY UPDATE discount_amt=VALUES(discount_amt); ") or die(mysql_error());

如果你像这样硬编码值,它可以工作,但我正在做变量:

mysql_query("INSERT INTO pricing_discount (id,discount_amt) VALUES (1,1),(2,3),(3,3),(4,12),(5,12) ON DUPLICATE KEY UPDATE discount_amt=VALUES(discount_amt); ") or die(mysql_error());

这样做的正确方法是什么?

如果您想知道为什么我在尝试更新记录时没有执行 UPDATE 而不是 INSERT,那是因为我正在关注这个 stackoverflow:

MySQL 中的多个更新

4

2 回答 2

1

我假设,在你的表discount_amt中将是 float 或 double 数据类型。然后下面的 sql 查询 qill 工作。对于 int、float、decimal 或 double 数据类型,无需在单引号之间添加值'

$query = "
 INSERT INTO pricing_discount 
 (id
 ,discount_amt
 ) VALUES 
 (1,".$pc_4x6_5m_to_9999."),
 (2,".$pc_4x6_10m_to_14999."),
 (3,".$pc_4x6_15m_to_19999."),
 (4,".$pc_4x6_20m_to_24999."),
 (5,".$pc_4x6_over_25m.") 
 ON DUPLICATE KEY UPDATE discount_amt = VALUES(discount_amt);
 ";

mysql_query($query) or die(mysql_error());
于 2013-10-31T13:57:21.887 回答
0

回顾一下,这有什么问题......

 $query = "
 INSERT INTO pricing_discount 
 (id
 ,discount_amt
 ) VALUES 
 (1,'$pc_4x6_5m_to_9999'),
 (2,'$pc_4x6_10m_to_14999'),
 (3,'$pc_4x6_15m_to_19999'),
 (4,'$pc_4x6_20m_to_24999'),
 (5,'$pc_4x6_over_25m') 
 ON DUPLICATE KEY UPDATE discount_amt = VALUES(discount_amt);
 ";


  mysql_query($query) or die(mysql_error());
于 2013-10-31T13:47:04.843 回答