[英]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 文本生成到變量中。 對於調試, echo
或var_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.