背景:这是我第一次在这里发布一个问题,但是我从阅读其他人那里学到了很多东西。问题和答案,我真的很感谢你的帮助!我花了几个小时研究这个问题,找不到适合我的解决方案。以下示例来自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.";
}
}
}
答案 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')";