#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_ *.