我從JS發送數據與AJAX到PHP那樣:將數據發送到數據庫超過30秒
$.ajax({ type: "POST", url: 'protected_page.php', data: JSON.stringify(distances), contentType: "application/json" });
數據「距離」的結構 - {ID1:陣列(95) ,ID2:陣列(95)...}。它有95個ID,每個ID有95個整數值表示距離(基本上是一個95x95矩陣)。
需要將數據插入我的表u_id | i_id1 | i_id2 | distance
。下面是這樣做的PHP方法,但它超過了30秒的最大執行時間,並且只有約70000行到達數據庫。我應該改變我的數據庫的結構還是可以讓它更優化?
function postDistances2($mysqli){
if (getenv("REQUEST_METHOD") !== "POST") return;
if ($distance = json_decode(file_get_contents("php://input"),true)) {
$keys = [];
$user_id = $_SESSION['user_id'];
foreach ($distance as $key => $value) {
array_push($keys,$key);
}
foreach($distance as $key=>$value){
for($i=0;$i<sizeof($value);$i++){
if ($insert_stmt = $mysqli->prepare("INSERT INTO image_distances (u_id, i1_id, i2_id, distance) VALUES (?, ?, ?, ?)")) {
$insert_stmt->bind_param('iiid', $user_id, $key, $keys[$i], $value[$i]);
// Execute the prepared query.
$insert_stmt->execute();
}
}
}
}
}
謝謝,我通過構建一個多值插入語句解決了這個問題,並在10秒內發送了所有數據,仍然不是一個快速的時間,但它完成了這項工作:) – Jackstick 2015-03-13 13:01:55
發送20條插入語句會更高效嗎? 500個值或1個插入語句10000個值? – Jackstick 2015-03-13 13:07:20
我認爲單個查詢會更好,但您最好檢查服務器上的設置。特別是'max_allowed_packet'。你可以通過運行SHOW VARIABLES LIKE'max_allowed_packet';'來看到 – rjdown 2015-03-13 13:10:03