繁体   English   中英

如果mysql_query带有&&

[英]if mysql_query with &&

如果要删除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";
}

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

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

普通的非空字符串始终求值为true。

您的代码是:

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'")
   )

您应该注意,如果正确执行DELETE语句,则mysql_query()返回true “正确执行”与“实际上删除任何行”不同。 因此,除非您的查询错误(语法错误,mysql不知道表/ cols),否则此查询将始终返回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_ *东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM