当我在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]";
我得到Null输出! 我认为“AND”运算符不起作用! 请在这件事上给予我帮助!! 看看我的完整代码和数据库快照! Click here
答案 0 :(得分:0)
如果它返回NULL,那么该记录可能不存在。尝试在屏幕上输出此查询并在此处发布原始查询。
也许您的搜索需要 LIKE 而不是 =
答案 1 :(得分:0)
可能,您要查找的行不存在。
AND
是一个布尔运算符,要求两个表达式必须求值为true。在查询的上下文中,这意味着要返回一行,这两个条件必须在该行上为真。
我怀疑你可能想要OR
这两个条件。您是否只想返回符合这两个条件的行,或者您是否希望任何具有特定值fname
的行以及具有特定值uname
的行?如果第一个查询返回行,那么将AND
替换为OR
会返回一些行。
要调试此类问题,请将SQL文本生成为变量,然后在将SQL文本发送到数据库之前对其进行echo或var_dump。
e.g。
$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的代码不是调试程序的最有效方法。缩小问题所在。
How to debug small programs http://ericlippert.com/2014/03/05/how-to-debug-small-programs/
备注强>
您可能想验证$_POST['fname'])
是否包含值。
如果没有满足谓词的行,则SELECT语句返回零行是有效的(SQL方式)。
如果将包含在SQL语句的文本中,则必须才能正确转义。 (更好的模式是使用准备好的语句和绑定占位符,可在(支持的)mysqli和PDO接口中使用。
另外,在fname
周围使用单引号....
$_POST['fname']
^ ^