【发布时间】:2018-10-09 11:23:39
【问题描述】:
我正在尝试将一个值数组多次插入一个表中。
我有一个简单的数组,由用户选中一个框生成,这就是添加到数组中的内容,然后我想将每个值插入到表中,我想我可以使用 foreach 循环并迭代 $我,但似乎我不能,我不需要担心安全性或其他任何事情,因为这是由两个人在内部使用的。
这是我所拥有的:
foreach($detailsinvoice as $desc){
$conn3 = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
$sql3 = "INSERT INTO
xero_invoices (ContactName, Description)
VALUES (:ContactName, :Description)";
$st3 = $conn3->prepare ( $sql3 );
$st3->bindValue( ":ContactName", $this->ContactName, PDO::PARAM_STR );
$st3->bindValue( ":Description", $desc, PDO::PARAM_STR );
$st3->execute();
$this->InvoiceNumber = $conn3->lastInsertId();
$conn3 = null;
}
这是我的第一次尝试,但收集到连接只能使用一次然后退出,所以我尝试了一次迭代,但我再次了解到你不能用 PDO 语句做到这一点。
$i = 3;
foreach($detailsinvoice as $desc){
$conn[$i] = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
$sql[$i] = "INSERT INTO
xero_invoices (ContactName, Description)
VALUES (:ContactName, :Description)";
$st[$i] = $conn[$i]->prepare ( $sql[$i] );
$st[$i]->bindValue( ":ContactName", $this->ContactName, PDO::PARAM_STR );
$st[$i]->bindValue( ":Description", $desc, PDO::PARAM_STR );
$st[$i]->execute();
$this->InvoiceNumber = $conn[$i]->lastInsertId();
$conn[$i] = null;
$i++;
}
detailsinvoice是数组,每次的ContactName都是一样的(Contactname工作只需要弄清楚循环数组)
如果有人能指出我正确的方向,我将不胜感激。
【问题讨论】:
-
收集到该连接只能使用一次您从哪里得到这个想法?这是否意味着我们在谈论范围问题?
-
不要不将
$conn3设置为null,并根据需要多次使用它。 -
您的整个请求/脚本实际上只需要 1 个连接,如果您改用
bindParam(),则可以将所有内容放在循环之前的execute()语句之前。你如何处理结果是另一回事,$this->InvoiceNumber在循环之后意义不大。 -
不需要很多mysql连接存在。您可以/应该使用相同的连接。你没有提到你面临的真正问题是什么?你只是分享了你不能做某事的假设。但没有描述您到底未能达到什么目标?
标签: php pdo sql-insert