Search code examples
phpmysqlprepared-statement

How to insert multiple rows in a mysql database at once with prepared statements?


I am trying to use staticsan´s answer in this question for prepared statements. Lets take this example:

$stmt = $mysqli->prepare("INSERT INTO something (userid, time, title) VALUES (?, ?, ?)");
$stmt->bind_param('iis', $userid, time(), $title);
$stmt->execute();

In staticsan´s answer imploding the array is adding all the values into the mysql statement so that in the end we can insert multiple data into the database with just one statement. How would this be done in my example?


Solution

  • This is completely valid:

    $stmt = $mysqli->prepare("INSERT INTO something (userid, time, title) VALUES (?, ?, ?)");
    
    $stmt->bind_param('iis', $userid, time(), $title);
    $stmt->execute();
    
    $stmt->bind_param('iis', $userid, time(), $title);
    $stmt->execute();
    
    $stmt->bind_param('iis', $userid, time(), $title);
    $stmt->execute();
    
    $stmt->bind_param('iis', $userid, time(), $title);
    $stmt->execute();
    

    You can foreach over your array of values to insert and bind and execute each time. It wont be quite as fast as the bulk insert in the example you linked, but it will be more secure.