使用单个查询更改多个MySQL字段 - 产品代码销售

时间:2015-08-10 18:13:46

标签: php html mysql database forms

我有一个网站,其中包含我销售的产品,每个产品都有自己的产品代码。问题是,最近我们将所有产品代码更改为所有产品。

因为在今天之前插入MySQL的所有销售都使用了旧的产品代码,当我尝试获取报告以查看已售出的产品中有多少时系统找到0,因为它在插入较旧的销售时查找新的产品代码与旧的。

解决方案:

即使它很痛苦,除了更新所有销售和插入MySQL的产品之外别无他法,用这种方式更新旧产品代码,这样就可以正常工作。

我需要像这样更新:

    $update = mysqli_query($database, "
update `sales` SET code = 0001 WHERE `code` = '4574645448458'
");

唯一的问题是它只更新了第一个带有此产品代码的产品,但我购买的产品与相同的产品代码一起销售......

如何以批量的方式解决这个问题?

我将改变的例子:

代码4574645448458 for 0001 代码4574645448459 for 0002

等等

1 个答案:

答案 0 :(得分:0)

以下是Marc B.的建议示例 使用prepared statementexecute每对"旧/新"值。

  

准备好的陈述可以重复执行。每次执行时,都会评估绑定变量的当前值并将其发送到服务器。该语句不会再次解析。语句模板不会再次传输到服务器。

例如:

// define an array with all of the code changes as "key/value" pairs
$changes=array(
    '4574645448458' => '0001',
    '4574645448459' => '0002',
    ....
);

// define the query string with placeholders
$sql="UPDATE `sales` SET `code`=:new_code WHERE `code`=:old_code;";

// prepare the statement and set up variables to be bound upon execution
$q=$database->prepare($sql);
$q->bind_param(':new_code',$new_code);
$q->bind_param(':old_code',$old_code);

// iterate through "changes", defining the "old" and "new" values for each code change
// execute the prepared statement with each pair of values
foreach ($changes as $old_code => $new_code) {
    $q->execute();
}