所以我正在研究这个有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;
}
}
答案 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);
}
}
请注意,您不应直接从函数回显任何内容 检查返回的值,然后决定是否要回显任何内容。