在這里我試圖同時插入多行在我的情況下同時插入超過 200-250 行但我得到了以下錯誤
Unknown: Input variables exceeded 1000. To increase the limit change max_input_vars in php.ini
但是當我增加max_input_vars = 3000時,這個已解決的問題現在可以插入,但它需要太多時間。
我想更快地插入但需要幫助
這是我的 php 代碼
<?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"];
// Converting the array to comma separated string
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]);
$sql = "SELECT COUNT(*) AS cntuser from bar_opening_details WHERE `item_id` = '" . $item_id_clean . "' AND close_date='" . $close_date_clean . "' AND item_cid='" . $item_cid_clean . "' ";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_array($result);
$count1 = $row['cntuser'];
if ($count1 > 0) {
// update
$updatequery = "UPDATE bar_opening_details 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 . "'
WHERE close_date='" . $close_date_clean . "' and `item_id` = '" . $item_id_clean . "' ";
mysqli_query($conn, $updatequery);
} else {
$insertquery = "INSERT INTO bar_opening_details
(item_cid,
item_id,
op_date,
op_value,
close_date,
close_val) values ('" . $item_cid_clean . "', '" . $item_id_clean . "', '" . $op_date_clean . "', '" . $op_value_clean . "', '" . $close_date_clean . "', '" . $close_val_clean . "')";
mysqli_query($conn, $insertquery);
}
}
// insert
$return_arr = array('item_cid' => $item_cid, 'item_id' => $item_id, 'op_date' => $op_date, "close_val" => $count);
echo json_encode($return_arr);
mysqli_close($conn);
}
這是我的ajax代碼。使用這個 iam 能夠發送插入請求,但它需要很多時間
<script>
$(document).ready(function() {
// submit button click
$("#submit").click(function() {
$('#loading').show();
var item_cid = [];
var item_id = [];
var op_date = [];
var op_value = [];
var close_date = [];
var close_val = [];
var Toast = Swal.mixin({
toast: true,
position: 'top-end',
showConfirmButton: false,
timer: 3000
});
// 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);
});
$.ajax({
url: 'lib/cbentry.php',
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
dataType: 'JSON',
success: function(response) {
$('.details').show();
// selecting values from response Object
var name = response.close_val;
$('#loading').hide();
// var email = response.email;
// var lang = response.lang;
// var foundjquery = response.foundjquery;
Toast.fire({
icon: 'success',
title: 'Data Entered Successfully'
})
// setting values
$('#name').text(name);
// $('#email').text(email);
// $('#lang').text(lang);
// $('#foundjquery').text(foundjquery);
}
});
});
});
</script>
uj5u.com熱心網友回復:
JSON
一個簡單的 2 行修復以允許無限專案:建議您將陣列編碼為 JSON 以進行 POST,然后json_decode()在它到達 PHP 時將其轉換回陣列。
但是,我不得不問......真的有數百個新的(或更改的)行嗎?如果只有幾行,請考慮通過 AJAX 一次將一行發送到 PHP——可能基于滑鼠離開“焦點”后值是否發生變化。很多小的 AJAX 呼叫會產生很多開銷(啟動許多 PHP 執行緒),但是當您離開網頁時任務就會完成。它會“感覺”好像每件事都是“瞬間的”。(好吧,如果你有 1000 個用戶同時做同樣的事情,這種技術可能會使服務器過載。)
陣列
這是另一種方法:使用“陣列”。如果輸入名稱以 結尾[]:
<input type=text name=x[] ">
將作為陣列進入$x. 如果你有多個,那么下標 (0, 1, ...) 會讓你匹配它們。
$list = GetArray('list');
function GetArray($fn) {
// Input an array of things from
// echo "<input type=checkbox name=\"fn[]\" value=\"$out_fn\" $checked>\n";
// url has &fn[]=aaa&fn[]=ccc
$req = @$_REQUEST[$fn]; // Note: this must NOT end in []
$fns = empty($req) ? [] :
(is_array($req) ? $req :
explode(',', $req));
return $fns; // always an array
}
($_REQUEST包括$_POST;如果您愿意,可以更改它)
插入
至于 MySQL 插入的速度……一個INSERT100 行的單行運行速度是 100 1-line 的 10 倍INSERTs。所以,如果真的有數百個新行,我建議“批量”插入。
如果大多數行已經在表中,那么INSERT IGNORE是一種“簡單”的處理方式。但是...如果AUTO_INCREMENT桌子上有一個 id,則 dups 將“燒掉” id。
IODKU 是處理新行或修改行的最佳方式。它也可以批量處理。但是,如果查詢不包括id可用的原始 ID,它也會燒毀 ID。
(我可以詳細說明,你詳細說明。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/456345.html
上一篇:C#mvc應用程式中的ajax中的多個引數失敗-添加了更多資訊
下一篇:將文本資料定位到網頁上的DIV?
