如果mysql_query与&&

时间:2011-10-31 09:49:35

标签: php mysql

如果删除了2个表中的行,我试图获得一个成功的结果,但我的查询只执行第一个查询,然后将结果恢复为成功,我该如何处理?

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

3 个答案:

答案 0 :(得分:3)

("DELETE FROM ex_answer WHERE name = '$userid2' AND testname = '$tid2'")应该是:

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

普通的非空字符串始终计算为true。

答案 1 :(得分:3)

您的代码是:

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

所以你基本上都在运行一个查询...尝试:

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

答案 2 :(得分:2)

您应该注意,如果true语句正确执行,mysql_query()将返回DELETE。 “正确执行”与“实际删除任何行”不同。因此,除非您的查询是错误的(错误的语法,表/ cols mysql不知道),这将始终返回true

如果您想知道是否修改了任何数据(在您的案例中已删除),请使用mysql_affected_rows()

您应该对传递给mysql的任何数据使用mysql_real_escape_string()

<?php

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

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

您可能还想查看PDO以替换过时的mysql_ *内容。

相关问题