PHP中的mysql_query()函数中的奇怪错误(查询中的And子句)

时间:2015-06-12 20:50:48

标签: php mysql

当我在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

2 个答案:

答案 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文本生成为变量。对于调试,echovar_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']
           ^     ^