Я читал и собирал информацию уже 2 дня, и я сдаюсь. Я не знаю, почему моя часть простого кода не преуспевает.Почему моя транзакция mysql не работает должным образом?
Я хочу вставить данные из одной формы в две таблицы и ДА Я знаю, что здесь есть точно такие же проблемы, но здесь, как я уже сказал, я знаком с ними, а также задаю больше вопросов.
Проблема в моем запросе где-то, по крайней мере, это то, во что я верю.
Вот он идет:
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));
Я попытался ВЫБРАТЬидентификатор изtable1 стол и SET это как @значение вместо LAST_INSERT_ID(). Я попытался запустить два запроса ... много разных решений.
Я выяснил, когда я дамп mysqli_query ($ con, $ query), он дает ложь каждый раз, если я не использую транзакцию, так что просто простые запросы, но мне они нужны.
Последнее, что я должен использовать PDO вместо mysqli? Зачем?
и
Зачем использовать Mysqli объектно-ориентированный стиль, а не процедурным?
Всякая помощь приветствуется. Я хотел бы больше понять, чем просто добиться эффекта здесь.
Знайте, что это мой первый пост здесь, но не первый визит.
Ваша проблема это не ясно. Вы пытались запускать запросы через собственный интерфейс вместо PHP. Кроме того, поскольку у вас несколько запросов, вы пробовали '... multi_query'? – m4ktub
@ m4ktub хорошая заметка о родном интерфейсе, который не был моим подходом вообще, поэтому в следующий раз я его помню. Согласно ответу @Adelphia, используя 'mysqli_multi_query', проблема решена. – Jozin