2015-06-10 3 views
0

Я читал и собирал информацию уже 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 объектно-ориентированный стиль, а не процедурным?

Всякая помощь приветствуется. Я хотел бы больше понять, чем просто добиться эффекта здесь.

Знайте, что это мой первый пост здесь, но не первый визит.

+0

Ваша проблема это не ясно. Вы пытались запускать запросы через собственный интерфейс вместо PHP. Кроме того, поскольку у вас несколько запросов, вы пробовали '... multi_query'? – m4ktub

+0

@ m4ktub хорошая заметка о родном интерфейсе, который не был моим подходом вообще, поэтому в следующий раз я его помню. Согласно ответу @Adelphia, используя 'mysqli_multi_query', проблема решена. – Jozin

ответ

0

Вы можете сделать только один запрос в то время, с 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)); 
+0

Thx. Это сработало, но какова цель использования транзакции? – Jozin

Смежные вопросы