为什么我的 mysql 交易不正常?

Why my mysql transaction is not working properly?

我已经阅读和收集信息 2 天了,我放弃了。我不知道为什么我的一段简单代码没有成功。

我想将数据从一种形式插入到两种 table 中,是的,我知道这里和那里描述的问题完全相同,但正如我所说,我对它们很熟悉,也需要询问更多问题。

问题出在我的查询中,至少我是这么认为的。

开始了:

    unset($err);
//Variables
    $host = 'my.server.com';
    $user = '123';
    $pass = 'password';
    $dbname = '123';
    $err = array();
    $error_form = false;
    $img = "sth/sth.jpg";
//Connecting to the database using mysqli application programming interface
    $con = mysqli_connect($host, $user, $pass, $dbname);
if (!validate()) {
    if (!$con) {
        echo "Connection failed : <br />" . $new_con->connect_errno . "<br />" . $new_con->connect_error;
        exit;
    } else {
        echo "Connected! <br />";
    }
    var_dump($name);
    echo "<br />";
    var_dump($email);
    echo "<br />";
    var_dump($img);
    echo "<br />";
    $query= "START TRANSACTION;
            INSERT INTO `123`.`table1` (`name1`,`name2`) 
            VALUES ('". $name . "','". $email ."');
            INSERT INTO `123`.`table2` (`table1_id`,`name3`,`name4`) 
            VALUES (LAST_INSERT_ID(),'". $story . "','". $img ."');
            COMMIT;";
    var_dump(mysqli_query($con,$query));
    echo "<br />";
    $_POST["name"] = "";
    $_POST["email"] = "";
    $_POST["story"] = "";
}
//Form validation
function validate() {
    global $name, $email, $story, $err, $error_form;
    if($_SERVER['REQUEST_METHOD']=="POST") {
        if(isset($_POST["name"]) && !empty($_POST["name"])) {
            $name = htmlspecialchars($_POST["name"]);
        } else {
            $err[0] = "Name is missing.";
            $error_form = true;
        }
        if(isset($_POST["email"]) && !empty($_POST["email"])) {
            if (filter_var($_POST["email"], FILTER_VALIDATE_EMAIL)) {
                $email = htmlspecialchars($_POST["email"]);
            } else {
                $err[1] = "Email was verified as incorrect.";
                $error_form = true;
            }
        } else {
            $err[1] = "Email is missing.";
            $error_form = true;
        }
        if(isset($_POST["story"]) && !empty($_POST["story"])) {
            $story = htmlspecialchars($_POST["story"]);
        } else {
            $err[2] = "Your story does not contain any characters, it can't be submited.";
            $error_form = true;
        }
    }
    return $error_form;
}

让我困惑的一切都发生在这里:

$query= "START TRANSACTION;
            INSERT INTO `123`.`table1` (`name1`,`name2`) 
            VALUES ('". $name . "','". $email ."');
            INSERT INTO `123`.`table2` (`table1_id`,`name3`,`name4`) 
            VALUES (LAST_INSERT_ID(),'". $story . "','". $img ."');
            COMMIT;";
    var_dump(mysqli_query($con,$query));

我试过 SELECT id FROM table1 table 和 SET 它作为 @value 而不是 LAST_INSERT_ID( )。我已经尝试 运行 两个查询...许多不同的解决方案。

我发现当我转储 mysqli_query($con,$query) 时它每次都给出 false 除非我不使用事务,所以只是简单的查询,但我需要它们。

最后一件事是我应该使用 PDO 而不是 mysqli 吗?为什么?

为什么要使用 mysqli 面向对象的风格而不是面向过程的风格?

感谢您的帮助。我想了解更多,而不是仅仅为了实现这里的效果。

请注意,这是我第一次 post 来这里,但不是第一次来。

你一次只能做一个查询mysqli_query看看mysqli_multi_query()

http://www.w3schools.com/php/func_mysqli_multi_query.asp

$query= "START TRANSACTION;
            INSERT INTO `123`.`table1` (`name1`,`name2`) 
            VALUES ('". $name . "','". $email ."');
            INSERT INTO `123`.`table2` (`table1_id`,`name3`,`name4`) 
            VALUES (LAST_INSERT_ID(),'". $story . "','". $img ."');
            COMMIT;";
    var_dump(mysqli_multi_query($con,$query));