Предыстория: это первый раз, когда я публикую здесь вопрос, но я многому научился, читая вопросы и ответы других, и я действительно ценю всю вашу помощь! Я потратил несколько часов на изучение этой проблемы и не могу найти решение, которое работает для меня. Пример ниже взят из Веб-сайт MySQL и до сих пор кажется наиболее надежным.
Цель: В конечном счете, я хочу связать идентификатор пользователя из базы данных регистрационной формы (на данный момент 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.";
}
}
}
Измените свой код с этим:
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
ценности в нем. В этом случае ваш первый запрос будет:
"INSERT INTO foo (text) VALUES('$text')";
Примечание: Ваш запрос небезопасен. Прочитай это
Как я могу предотвратить внедрение SQL в PHP?.
$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')";