3

私は古い php mysql 拡張機能に精通しています。

mysqli 拡張機能を使用する最初のスクリプトに取り組んでいます。

動的に生成されるテーブルに多数の行を挿入しようとしています。

毎回挿入される新しい行の数を事前に知らなくても、準備済みステートメントを使用して複数の行をテーブルに挿入することは可能ですか?

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

それが不可能な場合は、より効率的です。

  1. 準備済みステートメント、一度に 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

4

1 に答える 1

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

}

あなたのためにそれをすべきです!

于 2012-06-18T14:23:20.543 に答える