если mysql_query с

#php #mysql

#php #mysql

Вопрос:

Я пытаюсь получить успешный результат, если строки в 2 таблицах были удалены, но мой запрос выполняет только первый запрос, а затем возвращает результат как успешный, как мне это сделать?

 if (mysql_query("DELETE FROM ex_test_taken WHERE userid1 = '$userid2' AND testid1 = '$tid2'") amp;amp; ("DELETE FROM ex_answer WHERE name = '$userid2' AND testname = '$tid2'")) {
echo "Sucesfull";
} else {
echo "Failed";
}
 

Ответ №1:

Ваш код:

 if (
    mysql_query("DELETE FROM ex_test_taken WHERE userid1 = '$userid2' AND testid1 = '$tid2'") 
    amp;amp; ("DELETE FROM ex_answer WHERE name = '$userid2' AND testname = '$tid2'")
   )
 

Итак, вы в основном выполняете один запрос … попробуйте:

 if (
    mysql_query("DELETE FROM ex_test_taken WHERE userid1 = '$userid2' AND testid1 = '$tid2'") 
    amp;amp; 
    mysql_query("DELETE FROM ex_answer WHERE name = '$userid2' AND testname = '$tid2'")
   )
 

Ответ №2:

("DELETE FROM ex_answer WHERE name = '$userid2' AND testname = '$tid2'") должно быть:

 mysql_query("DELETE FROM ex_answer WHERE name = '$userid2' AND testname = '$tid2'")
 

Простая непустая строка всегда принимает значение true .

Комментарии:

1. Он означает, что вы должны добавить вызов функции в mysql_query для вашего второго запроса после оператора AND amp;amp; в вашем примере кода.

Ответ №3:

Вы должны отметить, что mysql_query() возвращает true , если DELETE оператор выполнен правильно. «выполнено правильно» — это не то же самое, что «фактически удалены все строки». Итак, если ваш запрос не является ошибочным (плохой синтаксис, таблицы / столбцы mysql не знает), это всегда будет возвращаться true .

Если вы хотите узнать, были ли изменены какие-либо данные (в вашем случае удалены), используйте mysql_affected_rows() .

Вы должны использовать mysql_real_escape_string() для любых данных, которые вы передаете в mysql.

 <?php

$success = 
  mysql_query('DELETE FROM ex_test_taken WHERE userid1 = "' . mysql_real_escape_string($userid2) . '" AND testid1 = "' . mysql_real_escape_string($tid2) . '"')
  amp;amp; mysql_affected_rows()
  amp;amp; mysql_query('DELETE FROM ex_answer WHERE name = "' . mysql_real_escape_string($userid2) . '" AND testname = "' . mysql_real_escape_string($tid2) . '"')
  amp;amp; mysql_affected_rows();

if ($success) {
  // DELETEd data in both queries
} else {
  // did not DELETE any data in either query
}
 

Возможно, вы также захотите заглянуть в PDO, чтобы заменить устаревший материал mysql_ *.