2016-06-06 2 views
0

Я довольно новичок в мире SQL, так что извините за мое невежество в этом.INSERT в MYSQL, а затем перед закрытием соединения выберите идентификатор вставки, а затем добавьте этот идентификатор в 3 другие таблицы.

У меня есть форма на странице администратора, которая добавляет игрока в базу данных команды. Когда форма представляется то, что мне нужно иметь случиться:

  • Игрока получает вставляются в таблицу игроков (player_id является первичным ключом и используют на следующей стадии).

  • Оператор select запускается, чтобы получить player_id.

  • Затем вставляет, что в 2-х других таблиц:
    • team_players и карт.

Ниже лучшее представление о том, что я пробовал:

if(isset($_POST['submit'])){ 

$first_name = mysqli_real_escape_string($con2, $_POST['first_name']); 
$last_name = mysqli_real_escape_string($con2, $_POST['last_name']); 
$email = mysqli_real_escape_string($con2, $_POST['email']); 
$validation_code = md5($email + microtime()); 


$sql0 ="INSERT INTO players 
(first_name, last_name, email, validation_code)       
VALUES ('$first_name', '$last_name','$email', '$validation_code')"; 



$sql01 = "SELECT player_id FROM players WHERE email='$email'"; 
$result01 = $con2->query($sql01); 

if ($result01->num_rows > 0) { 
$row01 = $result01->fetch_assoc(); 

$playerID = $row01['player_id']; 
echo $playerID; //In for debugging. Sometimes it works sometimes it doesn't 


$sql02 = "INSERT INTO team_players, cards (player_id, team_id) 
VALUES('$playerID', '$id')"; 

Спасибо за любую помощь по этому вопросу.

+2

** ПРЕДУПРЕЖДЕНИЕ ** При использовании 'mysqli' вы должны использовать [параметризованные запросы] (http://php.net/ manual/en/mysqli.quickstart.prepared-statements.php) и ['bind_param'] (http://php.net/manual/en/mysqli-stmt.bind-param.php), чтобы добавить данные пользователя в ваш запрос , ** НЕ ПРИНИМАЙТЕ ** использовать ручное экранирование и интерполяцию строк или конкатенацию, чтобы выполнить это, потому что вы создадите серьезные [SQL-инъекции ошибок] (http://bobby-tables.com/), если вы когда-нибудь забудете что-то избежать. – tadman

+0

не делайте 'select player_id'. вы должны использовать 'last_insert_id()' для безопасного получения идентификатора вашей новой записи. И точно КАК этот код не работает? –

+0

@tadman благодарит вас за ответ. Я обязательно обновлю свой код. – MBRD

ответ

1

Вы не можете вставить две таблицы, используя один запрос.

Вы можете использовать транзакцию и обе из них быть включены в одну транзакцию.

В противном случае выполните два отдельных запроса для каждой вставки. Еще одна вещи, вы не выполнили запрос для вставки в первую таблицу

START TRANSACTION; 
INSERT INTO team_players (player_id, team_id) VALUES (...); 
INSERT INTO cards (player_id, team_id) VALUES (...); 
COMMIT; 
+0

Благодарим за отзыв. Поэтому я обновил запрос двумя отдельными запросами и исправил выполнение первого запроса. Теперь он работает, но пользователь дважды добавляется в базу данных. Любая идея почему? – MBRD

+0

Вы выполняете запрос дважды? – jophab

+0

Не преднамеренно. Я думаю, проблема в том, что я отправляю на одну страницу, потому что форма находится в модальном режиме, поэтому, когда я нажимаю submit, страница обрабатывает форму снова после ее перезагрузки. – MBRD