簡體   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