多个插入的内存不足错误

时间:2014-03-02 23:21:50

标签: php mysql sql memory mysqli

我有一个脚本,它从用户那里获取可变数量的输入并将它们插入到数据库表中,每个项目都有一行。对于小型数据集,这样可以正常工作,但对于较大的数据集(超过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列:

  • id [int(11),autoincrement]
  • name [varchar(256]
  • 串行[INT(11)]
  • 成本[INT(11)];

1 个答案:

答案 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();