首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在MySQL查询上卡住

在MySQL查询上卡住
EN

Stack Overflow用户
提问于 2013-04-22 05:22:38
回答 5查看 207关注 0票数 0

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

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

下面是我调用该方法的方式:

代码语言:javascript
复制
$email = $_POST['email']; 
$person = Person::find_by_email($_POST['email']);

下面是我的Person::find_by_email()方法:

代码语言:javascript
复制
    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;
    }
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-04-22 05:26:27

您需要在MYSQL语句中将变量加引号,如下所示:

代码语言:javascript
复制
$query = "SELECT * FROM person WHERE email='$email'";
票数 2
EN

Stack Overflow用户

发布于 2013-04-22 05:30:13

我重写了你的函数,

代码语言:javascript
复制
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;
        }
}

希望这能有所帮助

票数 1
EN

Stack Overflow用户

发布于 2013-04-22 05:33:28

。。如果您不习惯检查mysql_error()来查看错误消息,那么可以输出查询并在可视化工具中运行它(比如HeidiSQL-- run on Wine on Linux,顺便说一下)。只要做..。

代码语言:javascript
复制
die("SELECT * FROM person WHERE email=". $email);

。。复制输出并运行它。它将向您显示错误消息。

。。现在,在查询中插入该值时似乎没有引用该值,如下所示:

代码语言:javascript
复制
SELECT * FROM person WHERE email=foo@bar.com

。。这是无效的语法。你需要用引号把它括起来。虽然你可以简单地通过转义和引用$email变量的值来修复这个错误,但你应该认真考虑在最新的PDO版本中使用它的现代功能,比如准备好的语句,这样你就不需要担心SQL Injection或损坏的转义函数。

。。Amplexos。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16136364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档