PHP数据库查询每次都返回false
我正在用PHP构建一个非常简单的登录服务,每次数据库查询都返回false。我已经使用phpmyadmin将电子邮件地址添加到数据库的users表中,但是当我在字段中输入一个电子邮件地址并按下submit时,查询会转到数据库,每次返回false 代码如下:PHP数据库查询每次都返回false,php,mysql,Php,Mysql,我正在用PHP构建一个非常简单的登录服务,每次数据库查询都返回false。我已经使用phpmyadmin将电子邮件地址添加到数据库的users表中,但是当我在字段中输入一个电子邮件地址并按下submit时,查询会转到数据库,每次返回false 代码如下: //queries the database and checks if the email address exists $result = mysqli_query($connection, "SELECT * FROM 'users' W
//queries the database and checks if the email address exists
$result = mysqli_query($connection, "SELECT * FROM 'users' WHERE 'Email'='$email'");
if ($result == FALSE){
die("The account for <i>$email</i> doesn't not exist!");
}
//查询数据库并检查电子邮件地址是否存在
$result=mysqli_query($connection,“从‘用户’中选择*,其中‘Email’=‘Email’”);
如果($result==FALSE){
死(“$email的帐户不存在!”);
}
我知道表单中的email变量是正确的,因为它作为错误打印出来。我还知道数据库中的电子邮件地址与它完全匹配。但是,查询只返回false
谢谢你的帮助 正如@Jared在评论中所说的,您在表和列名上使用了
单引号。您可以将其转换为反勾号,也可以将其删除
如果您的列、表和数据库名称包含在MySQL中,则需要反勾号
因为您使用的是mysqli.*
。我建议您使用预先准备好的语句,并使用num_rows
。例如:
// use prepared statements
$stmt = $connection->prepare('SELECT * FROM `users` WHERE `Email` = ?');
// ^ backticks ^
$stmt->bind_param('s', $email);
$stmt->execute();
$stmt->store_result();
if ($stmt->num_rows > 0){
// found
} else {
die("The account for <i>$email</i> doesn't not exist!");
}
//使用准备好的语句
$stmt=$connection->prepare('SELECT*FROM'users',其中'Email'=?');
//^backticks^
$stmt->bind_param('s',$email);
$stmt->execute();
$stmt->store_result();
如果($stmt->num_rows>0){
//发现
}否则{
死(“$email的帐户不存在!”);
}
这是因为您正在将一个字符串(“电子邮件”)与另一个字符串(电子邮件地址)进行比较,但它们不匹配。删除电子邮件周围的,
,或者使用反勾号(键盘左上方,靠近1
键)。不过,只有当您有一个带有保留字的列(使用date
是一个常见错误)或者列中有空格(这两个都是坏主意)时,才需要使用反勾号。哦,是的,还有来自“用户”的
。你把反勾号误认为是单引号;这些在查询中是不同的。如果您在查询中显示错误,您可能会看到此问题上的错误。如果您只是检查错误,则可以避免此问题。+1可捕获错误,但实际上不需要反勾号,因为用户
和电子邮件
不是保留关键字。避免在不需要的地方使用反勾号。