mysql_query with PHP variables


mysql_query with PHP variables

这应该很容易,但我无法让它工作。这个想法是寻找从表单发布的电子邮件地址。如果它存在,则回显某物,如果不是回显其他某物。

我的代码是:

<?php
//MySQL Database Connect
mysql_connect("localhost", "********", "**********") 
  or die("Unable to connect to MySQL");
//get data from form 
$email=$_POST['email'];
//ask the database for coincidences
 $result = mysql_query("SELECT email FROM pressmails WHERE email='.$email.'"); 
 $num_rows = mysql_num_rows($result); 

 if($num_rows < 0){ 
    echo "The user is registered";
} else { 
    echo "The user is not registered";
}  
 //Close database connection
 mysql_close();
 ?>

您没有正确连接字符串。

$result = mysql_query("SELECT email FROM pressmails WHERE email='.$email.'");

应该是

$result = mysql_query("SELECT email FROM pressmails WHERE email='".$email."'"); 

您应该使用结束引号来结束字符串(如果字符串以 " 开头,则也必须以 " 结尾字符串,' 也是如此)。

并且不要忘记使用mysql_real_escape_string,否则脚本不安全。

脚本将变为如下所示:

// save the query in a variable, so we can echo it to debug when it doesn't work as expected
$sql = "SELECT email FROM pressmails WHERE email='".mysql_real_escape_string($email)."'";
$result = mysql_query($sql);

您不需要连接标识符,因为将文本包装在 " 中将自动将变量解析为字符串:

$result = mysql_query("SELECT email FROM pressmails WHERE email='$email'"); 

你应该小心,请注意。执行上述操作表示存在严重的 SQL 注入漏洞。您应该考虑至少对$email进行消毒。另请参阅我对 PHP 中mysql_*函数的评论。

从文档中:

此扩展从 PHP 5.5.0 开始已弃用,并将在 未来。相反,应该使用 MySQLi 或 PDO_MySQL 扩展。 另请参阅 MySQL:选择 API 指南和相关常见问题解答以获取更多信息 信息。此功能的替代方法包括:

mysqli_close() PDO:将 NULL 的值分配给 PDO 对象

(假设你纠正了语法错误)这不是倒退的逻辑吗?

if($num_rows < 0){ 
 echo "The user is registered";
} else { 
echo "The user is not registered";
}  

如果用户已注册,则其电子邮件位于数据库中,并且查询返回一行或多行

尝试

if($num_rows){ 
   echo "The user is registered";
} else { 
  echo "The user is not registered";
}