我正在使用 PHP 腳本將數組的唯一值插入數據庫。這是腳本ini_set('display_errors', 1);ini_set('display_startup_errors', 1);error_reporting(E_ALL);if (isset($_POST['submit'])) { $df = $_POST['df']; $arr = array(); $file = fopen('files/'.$df.'.csv', 'r'); while (($line = fgetcsv($file)) !== false) { $arr[] = $line[2]; } $arruniq = array_unique($arr); fclose($file); $arr_count = count($arr); $time = strtotime(date_default_timezone_get()); $ts = date("Y-m-d H:i:s", $time); $mysqli = new mysqli("localhost", "root", "pass", "tab"); if ($mysqli === false) { die("ERROR: DB could not connect. "); } $sqlins = "insert into tab (created_time, uniq_id) values (?, ?);"; for ($i = 0; $i < $arr_count; $i++) { if ($stmt = $mysqli->prepare($sqlins)) { $stmt->bind_param("ss", $ts, $arruniq[$i]); $stmt->execute(); } else { echo "ERROR: Could not prepare query"; } } $mysqli->close();}該腳本正在讀取 CSV 文件、唯一值并插入到數據庫中。這就是問題所在,如果文件較小,腳本可以正常工作,但如果我使用較大的文件,則會收到此“500 內部服務器錯誤”。服務器 PHP 日志和 Apache 日志中沒有顯示或記錄錯誤。ini_set('memory_limit','2048M');我什至通過使用和標頭增加了腳本的執行時間和腳本的內存限制max_execution_time,這也沒有用。
2 回答

蝴蝶不菲
TA貢獻1810條經驗 獲得超4個贊
這是腳本執行時間的問題。由于我使用的是 webmin/virtualmin max_execution_time標頭不起作用。所以我在 virtualmin 服務器中更改了它
virtualmin server -> server configuration -> website options -> Maximum PHP script run time
現在問題已解決,但執行腳本需要更長的時間。

狐的傳說
TA貢獻1804條經驗 獲得超3個贊
如果您使用準備好的語句和事務,它應該會更快。
$mysqli->begin_transaction();
$stmt = $mysqli->prepare("INSERT INTO tab (created_time, uniq_id) values (?, ?);");
foreach($arruniq as $item) {
$stmt->bind_param("ss", $ts, $item);
$stmt->execute();
}
$mysqli->commit();
正確使用準備好的語句會給您帶來輕微的性能提升,因為服務器不需要每次都解析 SQL,并且事務會為您節省一些時間,因為它不會在commit每一行之后調用。
- 2 回答
- 0 關注
- 157 瀏覽
添加回答
舉報
0/150
提交
取消