Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP数组的数组插入Mysql_Php_Arrays - Fatal编程技术网

PHP数组的数组插入Mysql

PHP数组的数组插入Mysql,php,arrays,Php,Arrays,请求您提供帮助,了解如何通过单个查询将以下类型的PHP数组插入Mysql,方法是避免下面查询中的foreach循环 与下面的查询(foreach)相比,使用单个查询插入的性能提高了多少 PHP数组 ( [0] => Array ( [Name] => NNN1 [Type] => TTT1 ) [1] => Array ( [Name]

请求您提供帮助,了解如何通过单个查询将以下类型的PHP数组插入Mysql,方法是避免下面查询中的foreach循环

与下面的查询(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();
}

我认为你使用了错误的变量。在你的圈子里 $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
,但您可以在循环之前移动
newmysqli()
$db->prepare
。然后删除第二个
$dc->execute()
Hi Carl(),如果我们进行更改,那么数据将一次性插入(单SQL连接)还是需要更多连接。如果我们按照您的建议更改代码,我们将得到以下错误mysqli_stmt::bind_param():无法获取mysqli_stmt mysqli_stmt::execute():无法获取mysqli\u stmt mysqli\u stmt::close():无法获取mysqli\u stmty您的更新子句
Type=IF(Type!=VALUES(Type),VALUES(Type),'$ty')
没有任何意义,因为
VALUES(Type)
将与
$ty
相同,因此您可以只编写
Type=VALUES(Type)
数组有多大?对不起,这是一个输入错误是的,它正在工作,但我想通过避免foreach循环来插入数据,因为循环中的任何操作都需要许多连接(数组的长度),因此试图找到一种方法来避免此类问题使用PDO准备的语句插入多个值