Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.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 在插入过程中Mysqli和绑定多个值集_Php_Mysql_Mysqli - Fatal编程技术网

Php 在插入过程中Mysqli和绑定多个值集

Php 在插入过程中Mysqli和绑定多个值集,php,mysql,mysqli,Php,Mysql,Mysqli,希望有人能给我一些启示 当必须同时向表中插入多行时,我使用的sql如下所示: 在一些名称(firstName,lastName)中插入值('Joe','Smith'),('Fred','Sampson'),('Lisa','Pearce') 如您所见,我用一条语句插入了三行。我这样做的原因是我相信它比执行三条不同的语句来插入行更有效 所以我的问题是:如果我想把我的值绑定到一个语句,我该怎么做?不幸的是,我一直在网上寻找,我只能找到以下形式的单个语句示例: $stmt = $mysqli->

希望有人能给我一些启示

当必须同时向表中插入多行时,我使用的sql如下所示:

在一些名称(firstName,lastName)中插入值('Joe','Smith'),('Fred','Sampson'),('Lisa','Pearce')

如您所见,我用一条语句插入了三行。我这样做的原因是我相信它比执行三条不同的语句来插入行更有效

所以我的问题是:如果我想把我的值绑定到一个语句,我该怎么做?不幸的是,我一直在网上寻找,我只能找到以下形式的单个语句示例:

$stmt = $mysqli->prepare("INSERT INTO some_names (firstName, lastName) VALUES (?, ?)");
$stmt->bind_param('ss', $firstName, $lastName);
$firstName = "Joe";
$lastName = "Smith";
$stmt->execute();
$firstName = "Fred";
$lastName = "Sampson";
$stmt->execute();
这似乎相当于执行单独的INSERT语句,而且效率较低


所以我的问题是:有没有办法在多插入语句中绑定?请在这里教育我!谢谢

你看得不对

您几乎永远不会执行上面显示的操作,它几乎总是在一个循环中完成的。即使您动态构造
(?,?),(?,?),(?,?),(?,?)
,您仍然需要循环来构建查询字符串并绑定数据(由于MySQLi对by-ref绑定的荒谬立场,这将变得更加复杂)因此,在PHP需要完成的工作方面,它不会给您带来任何好处—您只是移动了循环—而且它会在可读性方面给您带来很大损失

它在往返数据库时确实有好处(假设您总是插入多行),但这只会在插入数百行或数千行时产生有意义的差异,在这种情况下,您很可能正在执行某种导入操作,在这种情况下,额外的几秒钟可能无关紧要(这不会降低页面加载速度)

这似乎相当于执行单独的INSERT语句,而且效率较低

不,它的效率并没有降低——因为一条语句只准备一次(为了弄清楚它应该做什么),之后只将数据发送到数据库。

简单:

$stmt = $mysqli->prepare("INSERT INTO some_names (firstName, lastName) VALUES (?, ?),(?,?),(?,?)")
$stmt->bind_param('ssssss', 'Joe', 'Smith','Fred','Sampson','Lisa','Pearce');

是的,但是连接起来会不那么费力。顺便提一下,一个重复的问题谢谢,但是如果是重复的,你能告诉我另一个问题在哪里吗?坏消息是,有这么多重复的问题(在所有主题上)每天都在下降,这使得不可能找到一个特定的问题。它可能已经埋在mysqli标签下的其他300个问题之下,或者差不多。是的,我个人很难找到答案。我建议要么串联,要么——如果你想不惜任何代价坚持使用本地准备的语句——PDO将需要大约10个ti创建多插入查询的工作量更少。因此,这样的计算似乎占用了大部分资源,而实际的磁盘写入、表锁、索引重建和单独的网络调用则不需要任何资源。谢谢。您也可以以这种方式在循环中使用bind_param吗?例如,
For(x=0…{$name1=$ar[$x];$name2=$ar[$x+1];$stmt->bind_参数($name1,$name2);}
另外,我猜您仍然需要知道初始准备语句中的
的数量。您能解释一下为什么使用s作为第一个参数吗?我知道有6个是因为6个字段,但我不明白为什么这样做。这对我来说没有意义(虽然是的,但它确实有效,我做了+1)。每个's'表示值的类型-s是类型“string”(这样mysql知道如何处理每个参数)-类型是I表示整数,d表示双精度(或浮点),s表示字符串,b表示blob:-在本例中,所有参数都是字符串,所以绑定6个:)