MySQLi:如何使用预准备语句插入多个表

时间:2014-08-01 12:46:28

标签: php mysql mysqli

我处于需要在查询中插入2个表的情况。我在网上搜索过,无法找到解决方案。我想要做的是在user表&中插入值。同时在profile中插入值。我可以一个接一个的方式,但我读过它效率不高,被认为是编码技术不佳。

当前代码:

$statement = $db->prepare("
    BEGIN;
    INSERT INTO `user`(`username`, `email`, `password_hashed`, `fname`, `lname`, `dob`, `agreement`, `gender`, `access_token`)
    VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);
    INSERT INTO `profile_picture`(`owner`) VALUES (LAST_INSERT_ID());
    COMMIT;
");
if($statement) {
    $statement->bind_param("ssssssiss", $username, $email, $hashedPassword, $fname, $lname, $dob, $agreement, $gender, $access_token);
    $statement->execute();
    $statement->close();

    echo "DONE";
    exit();
}
else printf("Error: %s.\n", $db->error);

3 个答案:

答案 0 :(得分:0)

我试图复制像弗兰克这样的答案时遇到了问题。正确的方法是:

<?php
   try {

        $db->beginTransaction();

        $stmt = $db->prepare("QUERY");
        $stmt->execute();

        $stmt = $db->prepare("ANOTHER QUERY??");
        $stmt->execute();

        $db->commit();

  } 
   catch(PDOException $ex) {
        //Something went wrong rollback!
        $db->rollBack();
        echo $ex->getMessage();
}

执行第一个语句后,您可以使用以下命令从PHP访问insertID:$ last_id = $ db-&gt; lastInsertId();

希望这有帮助!

答案 1 :(得分:-1)

也许这个可以帮到你:MySQL Insert into multiple tables?

我认为您需要这样的声明:

BEGIN;
INSERT INTO user(column_a,column_b) VALUES('value_a','value b');
INSERT INTO profile(column_x,column_y) VALUES('value_x','value_y');
COMMIT;

如果您需要user表中的最后一个id,可以使用LAST_INSERT_ID()函数。

答案 2 :(得分:-1)

尝试使用mysqli_multi_query,请检查此链接,例如http://blog.ulf-wendel.de/2011/using-mysql-multiple-statements-with-php-mysqli/