是否可以将mysqli预处理语句与多个插入组合?

时间:2012-05-18 16:22:07

标签: php mysqli prepared-statement

我精通旧的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).';';
    
  3. PHP v.5.3.8

    MySQL v.5.1.60

1 个答案:

答案 0 :(得分:2)

$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();
   }

}

应该为你做到!