0

我有这个在循环外插入查询以节省内存

$z = "";
foreach($link as $i)
{
//some stuff
$z .= "('" . $s . "', '" . $data . "', '" . $data2    ."'), ";

}

$z = substr($z, 0, strlen($z) - 2);
mysql_query("INSERT INTO table VALUES ".$z."");

如果循环只循环 1 之后我得到一个 mysql 错误,那么哪个工作正常,它有什么问题吗?

4

2 回答 2

1

请使用以下格式

$inserts = array();  foreach ($link as $i)
$inserts[] = "('','$s','$data')";
$query = "INSERT INTO table VALUES ". implode(", ", $inserts);
mysql_query($query) or die(mysql_error());
于 2013-05-07T07:30:07.987 回答
0

一种方法是使用对象进行插入。如果数量太大,这允许批量插入,最终插入可以在 destruct 方法中完成。

像这样的东西: -

<?php

$InsertClassExample = new InsertClassDemo($db);

foreach($link as $i)
{
    //some stuff
    $InsertClassExample->InsertItem($s, $data, $data2);
}

unset($InsertClassExample);

class InsertClassDemo
{
    var $db = '';
    var $InsertArray = array();

    function __CONSTRUCT($db)
    {
        $this->db = $db;
    }

    function __DESTRUCT()
    {
        if (count($this->InsertArray) > 0)
        {
            $this->PerformInsert();
        }
    }

    public function InsertItem($s, $data, $data2)
    {
        $this->InsertArray[] = "('" . $s . "', '" . $data . "', '" . $data2    ."'), ";
        if (count($this->InsertArray) > 250)
        {
            $this->PerformInsert();
        }
    }

    private function PerformInsert()
    {
        $query = "INSERT INTO table VALUES ".implode(",", $this->InsertArray);
        if($this->db->query($query) === false)
        {
            die("Insert Into table Failed - ".$this->db->error());
        }
        $this->InsertArray = array();
    }
}

?>
于 2013-05-07T08:14:59.203 回答