INSERT INTO&查询里面的函数里面有LAST_INSERT_ID

时间:2016-02-14 17:46:20

标签: php function mysqli insert-into last-insert-id

背景:这是我第一次在这里发布一个问题,但是我从阅读其他人那里学到了很多东西。问题和答案,我真的很感谢你的帮助!我花了几个小时研究这个问题,找不到适合我的解决方案。以下示例来自MySQL website,到目前为止,似乎是最可靠的。

目标:最终,我想将用户ID从注册表单(现在为foo)数据库链接到其他数据库(现在为foo2)。我认为我理解了INSERT INTO和LAST_INSERT_ID,并尝试了许多我在这里阅读的例子。假设我的代码是正确的(它可能不是),我认为我的问题是关于该区域之外的语法和代码(整个函数createRows)。我需要两个$查询还是只需要一个?我见过的很多例子都不会显示INSERT INTO语句之外的查询部分或代码,而是我需要看到的内容。

问题:我运行此代码并且没有任何错误。但是,数据只进入表foo2,完全跳过/绕过表foo,它仍然是完全空的。

function createRows(){
    if (isset($_POST['submit'])) {
        global $connection;
        $text = $_POST['text'];

        $query = "INSERT INTO foo (id,text) VALUES(NULL,'$text')";
        $query = "INSERT INTO foo2 (id,text) VALUES(LAST_INSERT_ID(),'$text')";  

        $result = mysqli_query($connection, $query);
        if (!$result) {
            die('Query FAILED' . mysqli_error($connection));
        } else {
            echo "Success! New record created.";
        }
    }
}

2 个答案:

答案 0 :(得分:1)

使用以下代码更改您的代码:

function createRows(){
    if (isset($_POST['submit'])) {
        global $connection;
        $text = $_POST['text'];

        $query = "INSERT INTO foo (id,text) VALUES(NULL,'$text')";

        $result = mysqli_query($connection, $query);
        if (!$result) {
            die('Query FAILED' . mysqli_error($connection));
        } else {
            $last = mysqli_insert_id($connection);
            $query1 = "INSERT INTO foo2 (id,text) VALUES($last,'$text')"; 
            mysqli_query($connection, $query1); 
            echo "Success! New record created.";
        }
    }
}

此外,我对您的第一个查询感到困惑。为什么要在null字段中插入id值?如果您的id是主键,则它不应为null。如果您已为其分配了自动增量,则无需在其中插入null值。在这种情况下,您的第一个查询将是:

"INSERT INTO foo (text) VALUES('$text')";
  

旁注:您的查询不安全。读这个   How can I prevent SQL injection in PHP?

答案 1 :(得分:0)

$query = "INSERT INTO foo (id,text) VALUES(NULL,'$text')";
$query = "INSERT INTO foo2 (id,text) VALUES(LAST_INSERT_ID(),'$text')"; 

您的第二个查询将覆盖第一个查询。要么一次执行一个,要么将它们放在单独的变量中(例如打击)。

$queryOne = "INSERT INTO foo (id,text) VALUES(NULL,'$text')";
$queryTwo = "INSERT INTO foo2 (id,text) VALUES(LAST_INSERT_ID(),'$text')";