没有得到SQL查询的预期结果

时间:2012-06-12 18:58:19

标签: php mysql sql

这是我的表

Field                   Type            Null    Key     Default  Extra
id_key                  int(11)         NO      PRI     NULL     auto_increment
tbl_users_username      varchar(255)    YES     UNI     NULL
tbl_users_password      varchar(32)     YES             NULL
tbl_users_identifier    varchar(32)     YES             NULL
tbl_users_token         varchar(32)     YES             NULL
tbl_users_access_type   int(1)          YES             NULL
tbl_users_timeout       int(10)         YES             NULL

这是我的代码

$query = "SELECT * FROM tbl_users where tbl_users_username = '$_POST[email_address]'" ;
$result = mysql_query($query);
if($result)
{
    echo "TRUE";        
}
else
{
    echo "FALSE";
}

连接数据库没有问题。运行查询时出现问题。无论电子邮件是否在表中,它都会返回$ result。我在这里错过了什么?如果表中存在电子邮件地址,则应该返回true,如果表中没有电子邮件地址,则返回false。

6 个答案:

答案 0 :(得分:1)

$_POST[email_address]我应该使用单引号或双引号:

$_POST["email_address"]$_POST['email_address']

$query = "SELECT * FROM tbl_users where tbl_users_username = '" . $_POST['email_address'] . "'" ;

然而,正如@FabioCosta所说,你必须获取结果或计算返回的行数以实现你的目标:

$query = "SELECT 1 FROM tbl_users where tbl_users_username = '" . $_POST['email_address'] . "'";
$result = mysql_query($query);
if(mysql_num_rows($result) === 1) {
    echo "TRUE";        
} else {
    echo "FALSE";
}

答案 1 :(得分:1)

然后将返回结果(如果您进行了有效查询)使用mysql_num_rows来检查邮件是否存在。 如果可以的话,实际上使用PDO

答案 2 :(得分:1)

如果您使用PHP的mysql_num_rows函数,您应该能够返回行数,并且您的逻辑将起作用。所以,请尝试以下方法:

$num = mysql_num_rows($result);
if ($num > 0) {
    echo "TRUE";
}else{
    echo "FALSE";
}

答案 3 :(得分:1)

我建议您打印出自己的查询,以确定它是您期望的查询的100%。

除此之外,您正在检查:

$result = mysql_query($query);

if($result)

这将检查您的查询是否返回了资源。您的查询有效,然后根据documentation,您应始终拥有资源。

建议代码:

$result = mysql_query($query);

if($result)
{
    $num = mysql_num_rows($result);
    if ($num > 0)
    {
        //do logic processing here...
        echo "TRUE"; 
    }
}
else
{
   die('Invalid query: ' . mysql_error());
}

if($result) { $num = mysql_num_rows($result); if ($num > 0) { //do logic processing here... echo "TRUE"; } } else { die('Invalid query: ' . mysql_error()); }

代码说明:

  1. 从查询中获取资源
  2. 如果返回了有效资源,请继续并检查已获取的记录数 来自此查询。
  3. 如果未返回资源,则else部分将显示失败消息。
  4. 我会强烈建议您考虑使用PDO库。


    简要介绍PDO的优点:

    1. 允许您轻松使用预准备语句(准备好的声明非常适合安全性!)

    2. PDO可以连接到各种不同的数据库,包括MySQL,还有其他数据库。

    3. 在我看来它很容易使用,很容易选择新的角色等。

    4. 堆栈溢出使用提示:

      1. 始终使用右上角的搜索。许多人遇到了可能对你有帮助的问题。
      2. 请务必查看How to Ask Question FAQ
      3. 反馈&如果需要,请随时提出更多问题!

答案 4 :(得分:0)

以下查询将根据发布的email_address'值中的值选择tbl_users_username值。因此,请使用此查询:

$query = 
"SELECT * FROM tbl_users where tbl_users_username = '".$_POST['email_address']."';";

答案 5 :(得分:0)

$query = "SELECT *
FROM tbl_users
WHERE tbl_users_username = '" . mysql_real_escape_string($_POST['email_address']) . "'";

$result = mysql_query($query) or die(mysql_error());

if($result)
{
    echo "TRUE";        
}
else
{
    echo "FALSE";
}

这应该可以解决您遇到的任何问题,或至少为您提供方便的错误消息。