我有一个脚本,它从用户那里获取可变数量的输入并将它们插入到数据库表中,每个项目都有一行。对于小型数据集,这样可以正常工作,但对于较大的数据集(超过10个项目),脚本始终会因内存不足错误而失败。这是我正在使用的代码 - 是否有更高效的内存方式?
$data = $_POST['dataArray'];
for ($i = 0; i < count($data); $i++)
{
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
$stmt = $mysqli -> prepare('INSERT INTO items(name, serial, cost) VALUES (?, ?, ?)');
$stmt -> bind_param('sii', $data[$i]['name'], $data[$i]['serial'], $data[$i]['cost']);
$stmt -> execute();
$stmt -> close();
$mysqli -> close();
}
FWIW,有问题的数据库表只有4列:
答案 0 :(得分:1)
您的问题是您通过将它们包含在循环中来创建大量连接;修复使用此:
$data = $_POST['dataArray'];
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
$stmt = $mysqli -> prepare('INSERT INTO items(name, serial, cost) VALUES (?, ?, ?)');
for ($i = 0; i < count($data); $i++) {
$stmt -> bind_param('sii', $data[$i]['name'], $data[$i]['serial'], $data[$i]['cost']);
$stmt -> execute();
}
$stmt -> close();
$mysqli -> close();