簡體   English   中英

PHP 中 mysql_query() 函數中的奇怪錯誤(查詢中的和子句)

[英]Strange Error in mysql_query() function in PHP (And clause in Query)

當我在 mysql_query() 函數中添加 AND 運算符時,它停止工作,然后停止工作! 例如:當我寫這個時:

 $query1 = mysql_query("SELECT *  FROM chat1 where friendname = '$_POST[fname]' ");

 $row= mysql_fetch_array($query1) or die(mysql_error()); 
 echo "$row[message]";

以上查詢運行成功!

但是當我這樣做時:

 $query1 = mysql_query("SELECT *  FROM chat1 where friendname = '$_POST[fname]' AND username = '$_POST[uname]' ");

 $row= mysql_fetch_array($query1) or die(mysql_error()); 

 echo "$row[message]";

我得到空輸出! 我認為“AND”運算符不起作用!!! 請在這件事上給予我幫助!! 看看我的完整代碼和數據庫快照! 點擊這里

如果它返回 NULL 那么可能記錄不存在。 嘗試在屏幕上輸出此查詢並在此處發布原始查詢。

也許您的搜索需要LIKE而不是=

很可能,您要查找的行不存在。

AND是一個布爾運算符,它要求兩個表達式的計算結果都為真。 在您的查詢上下文中,這意味着要返回一行,該單行的兩個條件都必須為真。

我懷疑您可能需要OR這兩個條件。 您是否只想返回滿足這兩個條件的行,或者您是否想要任何具有特定值的fname行,以及具有特定值的uname的任何行? 如果第一個查詢返回行,那么用OR替換AND應該返回一些行。


要調試此類問題,請將 SQL 文本生成到一個變量中,然后在將 SQL 文本發送到數據庫之前回顯或 var_dump 該 SQL 文本。

例如

    $sql = "SELECT *  FROM chat1 where friendname = '" 
         . mysql_real_escape_string($_POST['fname'])
         ."' ";
    echo "SQL=" . $sql ;  # for debugging

獲取發送給另一個客戶端的 SQL 語句的文本,以測試 SQL 語句,以確定該 SQL 語句是否實際返回了您希望它返回的結果集。

(在您的代碼中,在准備/執行 SQL 語句的函數中引用$sql 。)

對於所有動態生成的 SQL 文本,請遵循此模式:將 SQL 文本生成到變量中。 對於調試, echovar_dump或以其他方式發出或記錄變量的內容。 將 SQL 文本帶到另一個客戶端並對其進行測試。

將不工作的代碼轉儲到 StackOverflow並不是調試程序的最有效方法。 縮小問題所在。

如何調試小程序http://ericlippert.com/2014/03/05/how-to-debug-small-programs/


筆記

您可能想驗證$_POST['fname'])包含一個值。

如果沒有滿足謂詞的行,則 SELECT 語句返回零行是有效的(SQL 明智的)。

如果將潛在的不安全值包含在 SQL 語句的文本中,則必須正確轉義它們。 (更好的模式是使用帶有綁定占位符的准備好的語句,在(支持的)mysqli 和 PDO 接口中可用。

另外,在fname周圍使用單引號 .... 例如

    $_POST['fname']
           ^     ^

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM