【发布时间】:2019-11-14 05:26:20
【问题描述】:
请求您的帮助,了解如何通过避免如下查询的 foreach 循环将以下类型的 PHP 数组插入到 Mysql 中。
我们使用单个查询插入与下面的查询(foreach)相比,性能提升是多少?
PHP 数组
(
[0] => Array
(
[Name] => NNN1
[Type] => TTT1
)
[1] => Array
(
[Name] => NNN2
[Type] => TTT2
)
查询:
foreach ($array as $i) {
$na = $item["Name"];
$ty = $item["Type"];
$db = new mysqli($dbHost, $dbUsername, $dbPassword, $dbName);
$dc = $db->prepare("INSERT INTO allocation (`Name`, `Type`) VALUES (?, ?) ON DUPLICATE KEY UPDATE Type = IF(Type != VALUES(Type), VALUES(Type), '$ty')");
$dc->bind_param("ss", $na, $ty);
$dc->execute();
$dc->execute();
$dc->close();
}
【问题讨论】:
-
虽然仍然使用
foreach,但您可以在循环之前移动new mysqli()和$db->prepare。并删除第二个$dc->execute() -
嗨,Carl,如果我们进行更改,那么数据将一次性插入(单个 SQL 连接)还是需要更多连接。
-
如果我们按照您的建议更改代码,我们会收到以下错误 mysqli_stmt::bind_param(): Couldn't fetch mysqli_stmt mysqli_stmt::execute(): Couldn't fetch mysqli_stmt mysqli_stmt:: close(): 无法获取 mysqli_stmt
-
您的更新子句
Type = IF(Type != VALUES(Type), VALUES(Type), '$ty')没有任何意义,因为VALUES(Type)将与$ty相同,所以您不妨写Type = VALUES(Type) -
阵列可以有多大?