【问题标题】:PHP Array of Array insert MysqlPHP Array of Array 插入 Mysql
【发布时间】: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)
  • 阵列可以有多大?

标签: php arrays


【解决方案1】:

我认为您使用了错误的变量。在你的循环中 $i 应该是 $item

将数据库连接代码排除在循环之外

$db = new mysqli($dbHost, $dbUsername, $dbPassword, $dbName);

foreach ($array as $item) // $i should be $item
{
    $na =  $item["Name"]; 
    $ty = $item["Type"];  
    $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 循环来插入数据,因为循环中的任何操作都需要许多连接(数组的长度),因此试图找到一种方法避免此类问题
  • 使用 PDO 准备语句插入多个值 link
猜你喜欢
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 2021-04-15
  • 1970-01-01
  • 2022-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多