【问题标题】:Is it possible to combine mysqli prepared statement with multiple inserts?是否可以将 mysqli 准备好的语句与多个插入结合起来?
【发布时间】:2012-05-18 16:22:06
【问题描述】:

我精通旧的 php mysql 扩展。

我正在编写我的第一个使用 mysqli 扩展的脚本。

我将在动态生成的表中插入大量行。

是否可以在事先不知道每次插入的新行数的情况下,使用准备好的语句将多行插入到表中?

$stmt   = $mysqli->prepare("INSERT INTO `activity` (`id`, `name`, `type`) VALUES ?, ?, ?;");

如果不可能,那会更有效:

  1. 准备好的语句,一次一行
  2. 非准备语句,一次约 50 行

    // prepared statement
    
    $stmt   = $mysqli->prepare("INSERT INTO `activity` (`id`, `name`, `type`) VALUES (?, ?, ?)");
    
    for($i=0;$i<$limit;$i++)
    
    {
    
        $stmt->bind_param('iss', $id[$i], $name[$i], $type[$i]);
    
        $stmt->execute();
    
    }
    
    
    // non-prepared statement
    
    $query  = "INSERT INTO `activity` (`id`, `name`, `type`) VALUES ";
    
    for($i=0;$i<$limit;$i++)
    
    {
    
        $query  .= "\n(".$mysqli->real_escape_string($id[$i]), $mysqli->real_escape_string($name[$i]), $mysqli->real_escape_string($type[$i])."),";
    
    }
    
    $query  = substr($query, 0, -1).';';
    

PHP v.5.3.8

MySQL v. 5.1.60

【问题讨论】:

  • +1 用于切换到 mysqli ...您编写的第一个选项将不起作用...至于速度,您可以在本地测试它并找出:D 我很想知道
  • 您自己回答了您的问题。对于每对值,绑定值并执行语句。我不知道你为什么首先问。

标签: php mysqli prepared-statement


【解决方案1】:
$stmt = $mysqli->stmt_init();

if($stmt->prepare("INSERT INTO `activity` (`id`, `name`, `type`) VALUES (?, ?, ?)"))
{
   $stmt->bind_param('iss', $_id, $_name, $_type);
   for($i=0;$i<$limit;$i++)
   {
      $_id = $id[$i];
      $_name = $name[$i];
      $_type = $type[$i];
      $stmt->execute();
   }

}

应该为你做!

【讨论】:

  • 我的问题不是我需要进行多次插入,而是我需要为单个语句提供可变数量的参数。例如,语句的一次运行我将有三个值字段,而下一次运行我将有五个值字段。
  • 抱歉,我刚刚重读了我的问题,我意识到您确实回答了我提出的问题,而不是我认为我提出的问题 :-)
  • 他的问题是关于一个包含所有插入的构造语句和一个执行准备好的语句的循环之间的性能差异。
猜你喜欢
  • 2010-10-14
  • 2022-01-06
  • 1970-01-01
  • 2014-03-16
  • 2019-04-07
  • 2010-12-30
  • 2013-11-26
  • 2016-04-05
  • 1970-01-01
相关资源
最近更新 更多