一次多个SQL查询

时间:2014-03-18 18:51:38

标签: php mysql sql

我的PHP中有一个循环,我在里面运行一个SQL查询:

foreach($records as $result) {
    $sql2.="INSERT into voipwallboard_ast_queue_log (time, callid, queuename, agent, event, arg1, arg2, arg3, queue_id) values ('".$result["time"]."', '".$result["callid"]."', '".$result["queuename"]."', '".$result["agent"]."', '".$result["event"]."', '".$result["arg1"]."', '".$result["arg2"]."', '".$result["arg3"]."', '".$result["queue_id"]."'); ";
}
$rs2=mysql_query($sql2,$conn);

然后处理循环之外的查询来插入数据加载而不是每次在循环内处理查询但是它只在我的数据库中插入一行,我在这里做错了什么?

5 个答案:

答案 0 :(得分:0)

http://uk1.php.net/mysql_query

Quote:mysql_query()发送一个唯一的查询(不支持多个查询)

另请注意,现在不推荐使用MySQL扩展。

答案 1 :(得分:0)

您可以使用mysqli_multi_query查看示例HERE

注意:请勿使用mysql_query现已弃用,很快就会删除 而不是mysql_query您可以使用PDO::querymysql::query这些是新的和注射安全的

答案 2 :(得分:0)

$sql2 ="INSERT into voipwallboard_ast_queue_log (time, callid, queuename, agent, event, arg1, arg2, arg3, queue_id) values ";

foreach($records as $result) {
$sql2.=" ('".$result["time"]."', '".$result["callid"]."', '".$result["queuename"]."', '".$result["agent"]."', '".$result["event"]."', '".$result["arg1"]."', '".$result["arg2"]."', '".$result["arg3"]."', '".$result["queue_id"]."'), ";
}
rtrim($sql2, ",") // Delete the last comma

$rs2=mysql_query($sql2,$conn);

类似于:
    INSERT INTO testtesiddate_format)     VALUES(NULL,'2014-03-20'),(NULL,'2014-03-22');

如果您使用此方法。只有一次选择查询将触发db,因此它将更快,更少负载到您的数据库。

答案 3 :(得分:0)

$sql2="INSERT into voipwallboard_ast_queue_log (time, callid, queuename,
       agent, event,arg1, arg2, arg3, queue_id) values";

foreach($records as $result) {
    $sql2.="('".$result["time"]."', '".$result["callid"]."', '".
           $result["queuename"]."', '".$result["agent"]."', '".
           $result["event"]."', '".$result["arg1"]."', '".
           $result["arg2"]."', '".$result["arg3"]."', '".$result["queue_id"]."'),; ";
}
rtrim($sql2, ",")
$rs2=mysql_query($sql2,$conn);

在整个insert语句的循环insetad的每次运行中都应追加值之后的查询部分

答案 4 :(得分:0)

正如所有人所建议的那样,使用mysqli_multi_query

相关,但无关。您应该将查询存储在一个数组中,并用逗号进行内嵌,而不是连接

$sql ="INSERT into voipwallboard_ast_queue_log (time, callid, queuename, agent, event, arg1, arg2, arg3, queue_id) values ";
$inserts = array();

foreach($records as $result)
    $inserts[] ="INSERT into voipwallboard_ast_queue_log (time, callid, queuename, agent, event, arg1, arg2, arg3, queue_id) values ('".$result["time"]."', '".$result["callid"]."', '".$result["queuename"]."', '".$result["agent"]."', '".$result["event"]."', '".$result["arg1"]."', '".$result["arg2"]."', '".$result["arg3"]."', '".$result["queue_id"]."');";

$mQuery = mysqli_multi_query( $sql . implode(',', $inserts) );