我有这个在循环外插入查询以节省内存
$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,那么哪个工作正常呢?它有什么问题吗?
答案 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();
}
}
?>