坚持MySQL查询

时间:2013-04-21 21:22:38

标签: php mysql

所以我正在研究这个有Person类的php程序。该类中有一个名为find_by_email($email)的方法。我尝试通过电子邮件找到一个用户,使用我确定知道的电子邮件地址在我的数据库中。查询数据库后,它应该返回一个person对象。

我已经检查过以确保我的表名和列是正确的。测试后,似乎代码未传递第一个if语句:if ($r = mysql_query($query, $dbc))。我唯一能想到的是我的查询必须是不正确的。这不是正确的语法吗?

这是我如何称呼该方法:

$email = $_POST['email']; 
$person = Person::find_by_email($_POST['email']);

这是我的Person::find_by_email()方法:

    public static function find_by_email($email) {
        global $dbc;
        $query = "SELECT * FROM person WHERE email=". $email;
        if ($r = mysql_query($query, $dbc)) {
            if($row = mysql_fetch_array($r)) {
                $person = new Person($row);
                return $person;
            }
        }else{
        $error = "Could not find user";
                echo $error;
        return nil;
    }
}

5 个答案:

答案 0 :(得分:2)

你需要在你的MYSQL语句中引用你的变量,如下所示:

$query = "SELECT * FROM person WHERE email='$email'";

答案 1 :(得分:1)

我重写了你的功能,

public static function find_by_email($email) {
        global $dbc;
        $query = "SELECT * FROM person WHERE email='{$email}'";
        $result = mysql_query($query, $dbc)
        $num_rows = mysql_num_rows($result);
        if ($num_rows) {
            if($row = mysql_fetch_array($r)) {
                $person = new Person($row);
                return $person;
            }
        }else{
        $error = "Could not find user";
                echo $error;
        return nil;
        }
}

希望这会有所帮助

答案 2 :(得分:1)

。 。如果您不方便检查mysql_error()以查看错误消息,您可以输出查询并在可视化工具中运行它(如HeidiSQL - 在Linux上运行Wine,顺便说一下)。只是做...

die("SELECT * FROM person WHERE email=". $email);

。 。复制输出并运行它。它会给你错误信息。

。 。现在,在查询中插入它时,您似乎没有引用该值,例如:

SELECT * FROM person WHERE email=foo@bar.com

。 。这是无效的语法。您需要将其括在引号中。您只需通过转义和引用$email变量的值来修复错误,您应该认真考虑在最近的PHP版本中使用PDO来获取其现代功能,例如准备好的语句,这样您就可以不必担心SQL Injection或破坏逃脱的功能。

。 。 Amplexos。

答案 3 :(得分:0)

假设您已正确定义$dbc ...

首先,您的查询字符串错误,您需要$email周围的引号:

$query = "SELECT * FROM person WHERE email='". $email . "'";

其次,你的SQL是可注入的,你需要转义帖子字符串:

$email = mysql_real_escape_string($_POST['email']); 

第三,请不要使用mysql库,因为它们已被弃用,请搜索mysqli并阅读相关内容。

答案 4 :(得分:0)

让我们假设$ dbc已经打开了与PDO

的连接
public static function find_by_email($email) {
    global $dbc;
    $query = "SELECT * FROM person WHERE email=?";
    $stm = $dbc->prepare($query);
    $stm->execute(array($email));
    if ($row = $stm->fetch()) {
        return new Person($row);
    }
}

请注意,您不应直接从函数回显任何内容 检查返回的值,然后决定是否要回显任何内容。