2015-10-07 5 views
0

Я хочу удалить из двух таблиц. Я знаю, что могу использовать присоединиться, но я наткнулся на этот post предполагая я мог бы просто сделать это нравится точкой с запятой:Удаление из двух таблиц в одном запросе mysqli

$query = " DELETE from pupil_data WHERE pupil_id=$pupil_id; 
      DELETE from pupil_conditions WHERE pupil_id=$pupil_id"; 
$bob = $conn->query($query); 

Это не работает. Если я сделаю каждый запрос самостоятельно, тогда это будет хорошо.

Почему он не работает с точкой с запятой?

+1

Вам нужно запустить его с помощью [multi_query] (http://php.net/manual/en/mysqli.multi-query.php) – Epodax

+0

спасибо - легко, когда вы знаете, как это сделать! – maxelcat

ответ

0

попробовать, как этот

$query = " DELETE from pupil_data WHERE pupil_id=$pupil_id; 
      DELETE from pupil_conditions WHERE pupil_id=$pupil_id"; 
$bob = $conn->multi_query($query); 
+0

спасибо - отлично. Почему вы отметили вниз ??? Я отметил вас ... – maxelcat

+0

приветствую :) спасибо за upvote –

+1

Я думаю, что некоторые люди просто получают удовольствие от ответа на вопрос, не задавая вопросов или не прося разъяснений. – NaijaProgrammer

0

Прежде всего, ваш запрос не удаляет из двух таблиц в одном запросе. Существует два отдельных запроса SQL.

Во-вторых, вам не нужно запускать 2 запроса в одном вызове функции. Запустите два отдельных запроса в двух отдельных вызовах функций. Это было бы логично и избавило бы вас от многих неприятностей.

В-третьих, никогда не используйте mysqli_multi_query() за такую ​​прихоть. Цель этой функции различна. Каждый, кто просил вас использовать его, никогда не использовал его на самом деле и понятия не имел, как правильно его использовать, помогая вам стрелять в ногу.

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

$stmt = $conn->prepare("DELETE from pupil_data WHERE pupil_id=?"); 
$stmt->bind_param("s",$pupil_id); 
$stmt->execute(); 

$stmt = $conn->prepare("DELETE from pupil_conditions WHERE pupil_id=?"); 
$stmt->bind_param("s",$pupil_id); 
$stmt->execute(); 

- код, который вы должны запустить.

+4

Как это ответ? Просто спросите – NaijaProgrammer

+1

_ «В-третьих, никогда не используйте mysqli_multi_query() для такой прихоти. Цель этой функции различна, и все, кто просят вас ее использовать, никогда не использовали ее в реальности» _ Тогда почему бы не объяснить, почему «неправильно» использовать ее ? – Epodax

+0

Ну, я задался вопросом, было ли 2 запроса уродливыми. Я также сказал, что меня интересует, почему мой код не работал. Я считаю, что это действительно 2 вопроса. Я использую подготовленные заявления в целом. Я думал, что твой тон был немного суровым, но, хотя и ценю, что ты тратишь время. Почему бы не сказать что-то о том, почему вы не должны использовать multi_query ... – maxelcat

-1

DELETE table_1, table_2, ... Из табл-работах [где условия]
DELETE FROM table_1, table_2, ... используя таблицу-работах [где условия]

Здесь reference

+0

Ответ от правильного источника –

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