循环插入查询只能运行一次但不能运行

时间:2013-05-07 06:33:25

标签: php mysql

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

$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."");

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

2 个答案:

答案 0 :(得分:1)

请使用以下格式

$inserts = array();  foreach ($link as $i)
$inserts[] = "('','$s','$data')";
$query = "INSERT INTO table VALUES ". implode(", ", $inserts);
mysql_query($query) or die(mysql_error());

答案 1 :(得分:0)

执行此操作的一种方法是使用对象执行插入操作。如果数量过大,则允许对插入物进行批量处理,最终插入可以在破坏方法中完成。

这样的事情: -

<?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();
    }
}

?>