所以我正在做这个php程序,它有一个Person类。该类内部有一个名为find_by_email($email)的方法。我尝试通过电子邮件查找用户,使用的电子邮件地址肯定在我的数据库中。查询db之后,它应该返回一个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;
}
}发布于 2013-04-22 05:26:27
您需要在MYSQL语句中将变量加引号,如下所示:
$query = "SELECT * FROM person WHERE email='$email'";发布于 2013-04-22 05:30:13
我重写了你的函数,
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;
}
}希望这能有所帮助
发布于 2013-04-22 05:33:28
。。如果您不习惯检查mysql_error()来查看错误消息,那么可以输出查询并在可视化工具中运行它(比如HeidiSQL-- run on Wine on Linux,顺便说一下)。只要做..。
die("SELECT * FROM person WHERE email=". $email);。。复制输出并运行它。它将向您显示错误消息。
。。现在,在查询中插入该值时似乎没有引用该值,如下所示:
SELECT * FROM person WHERE email=foo@bar.com。。这是无效的语法。你需要用引号把它括起来。虽然你可以简单地通过转义和引用$email变量的值来修复这个错误,但你应该认真考虑在最新的PDO版本中使用它的现代功能,比如准备好的语句,这样你就不需要担心SQL Injection或损坏的转义函数。
。。Amplexos。
https://stackoverflow.com/questions/16136364
复制相似问题