【发布时间】:2022-09-23 01:38:44
【问题描述】:
在这里,我需要一次更新 100 多个数据。这个查询对我有用,但它太慢了,至少需要 15 到 20 秒才能执行。 我尝试了几件事但失败了 任何帮助表示赞赏。我还是学习者。
<?php
include \"../connection.php\";
if (isset($_POST[\'close_val\'])) {
$item_cid = $_POST[\"item_cid\"];
$item_id = $_POST[\"item_id\"];
$op_date = $_POST[\"op_date\"];
$op_value = $_POST[\"op_value\"];
$close_date = $_POST[\"close_date\"];
$close_val = $_POST[\"close_val\"];
$PurchaseRate = $_POST[\"PurchaseRate\"];
$GeneralRate = $_POST[\"GeneralRate\"];
$WholeSaleRate = $_POST[\"WholeSaleRate\"];
$WholeSaleQty = $_POST[\"WholeSaleQty\"];
for ($count = 0; $count < count($item_id); $count++) {
$item_cid_clean = mysqli_real_escape_string($conn, $item_cid[$count]);
$item_id_clean = mysqli_real_escape_string($conn, $item_id[$count]);
$op_date_clean = mysqli_real_escape_string($conn, $op_date[$count]);
$op_value_clean = mysqli_real_escape_string($conn, $op_value[$count]);
$close_date_clean = mysqli_real_escape_string($conn, $close_date[$count]);
$close_val_clean = mysqli_real_escape_string($conn, $close_val[$count]);
$PurchaseRate_clean = mysqli_real_escape_string($conn, $PurchaseRate[$count]);
$GeneralRate_clean = mysqli_real_escape_string($conn, $GeneralRate[$count]);
$WholeSaleRate__clean = mysqli_real_escape_string($conn, $WholeSaleRate[$count]);
$WholeSaleQty_clean = mysqli_real_escape_string($conn, $WholeSaleQty[$count]);
$updatequery = \"UPDATE table1 SET
`item_cid` = \'\" . $item_cid_clean . \"\',
`item_id` = \'\" . $item_id_clean . \"\',
`op_date` = \'\" . $op_date_clean . \"\',
`op_value` = \'\" . $op_value_clean . \"\',
`close_date` = \'\" . $close_date_clean . \"\',
`close_val` = \'\" . $close_val_clean . \"\',
`PurchaseRate` = \'\" . $PurchaseRate_clean . \"\',
`GeneralRate` = \'\" . $GeneralRate_clean . \"\',
`WholeSaleRate` = \'\" . $WholeSaleRate__clean . \"\',
`WholeSaleQty` = \'\" . $WholeSaleQty_clean . \"\'
WHERE close_date=\'\" . $close_date_clean . \"\'
and `item_id` = \'\" . $item_id_clean . \"\' \";
mysqli_query($conn, $updatequery);
}
$return_arr = array(\'item_cid\' => $item_cid, \'item_id\' => $item_id, \'op_date\' => $op_date, \'bar\' => $item_type);
echo json_encode($return_arr);
}
?>
这个ajax用来初始化大批发布到 php
var item_cid = [];
var item_id = [];
var op_date = [];
var op_value = [];
var close_date = [];
var close_val = [];
var PurchaseRate = [];
var GeneralRate = [];
var WholeSaleRate = [];
var WholeSaleQty = [];
// Initializing array with Checkbox checked values
$(\"input[name=\'item_cid[]\']\").each(function() {
item_cid.push(this.value);
});
$(\"input[name=\'item_id[]\']\").each(function() {
item_id.push(this.value);
});
$(\"input[name=\'op_date[]\']\").each(function() {
op_date.push(this.value);
});
$(\"input[name=\'op_value[]\']\").each(function() {
op_value.push(this.value);
});
$(\"input[name=\'close_date[]\']\").each(function() {
close_date.push(this.value);
});
$(\"input[name=\'close_val[]\']\").each(function() {
close_val.push(this.value);
});
$(\"input[name=\'PurchaseRate[]\']\").each(function() {
PurchaseRate.push(this.value);
});
$(\"input[name=\'GeneralRate[]\']\").each(function() {
GeneralRate.push(this.value);
});
$(\"input[name=\'WholeSaleRate[]\']\").each(function() {
WholeSaleRate.push(this.value);
});
$(\"input[name=\'WholeSaleQty[]\']\").each(function() {
WholeSaleQty.push(this.value);
});
$.ajax({
url: myurl,
type: \'post\',
data: {
item_cid: item_cid,
item_id: item_id,
op_date: op_date,
op_value: op_value,
close_date: close_date,
close_val: close_val,
PurchaseRate: PurchaseRate,
GeneralRate: GeneralRate,
WholeSaleRate: WholeSaleRate,
WholeSaleQty: WholeSaleQty
},
dataType: \'JSON\',
success: function(response) {
//success
}
这里 php ajax html 代码的每一步都检查正确,它在循环中的 mysql 查询的唯一 php 部分需要修复。
-
对于数百个单独的 UPDATE 查询来说,这并不是一个糟糕的时间。
-
良好的代码缩进将帮助我们阅读代码,更重要的是它会有所帮助你调试你的代码Take a quick look at a coding standard 为您自己的利益。您可能会被要求在几周/几个月内修改此代码,最后您会感谢我的。
-
您的脚本对SQL Injection Attack 开放。即使是if you are escaping inputs, its not safe!,您也应该始终在
MYSQLI_或PDOAPI 中使用prepared parameterized statements,而不是将用户提供的值连接到查询中。永远不要相信任何用户输入!这也将消除未转义字符问题,例如文本字符串中的\'。 -
使用参数准备一次查询,然后对每个数据项运行一次执行。通过这种方式,您可以删除数据库往返行程,以便为每个数据项编译相同的查询。您还可以更安全地访问数据库