我是PHP的新手,但我喜欢创建一个脚本来检查我的MySQL数据库中是否有电子邮件,数据库名称是"Fily_Registrations"
,表是“用户”,值是{{1 }}。所以基本上如果我的数据库中存在电子邮件"email"
并且我调用像"hi@all.com"
这样的php脚本它应该回显"http://path/to/php.php?email=hi@all.com"
如果它不存在它应该回显{{1} }。
这就是我现在的票价,但总是回应“不”:
"YES"
有谁知道如何解决这个问题?
答案 0 :(得分:5)
如果数据库是Fily_Registrations,则查询错误。试试这个:
$email = mysql_real_escape($_GET["email"]);
$DataBase = "Fily_Registrations";
mysql_connect("server", "username", "password") or die(mysql_error());
mysql_select_db($DataBase) or die(mysql_error());
$query = "SELECT * FROM users WHERE email = '{$email}'";
$result = mysql_query($query);
echo (mysql_num_rows($result) == 0) ? 'NO' : 'YES';
如果查询不正确,mysql_query返回false。首先阅读http://pl1.php.net/mysql_query并考虑使用PDO(http://pl1.php.net/pdo)而不是普通的mysql_query。
答案 1 :(得分:0)
您的代码应该是这样的:
<?php
$email = $_GET["email"];
$DataBase = "Fily_Registrations";
mysql_connect("server", "username", "password") or die(mysql_error());
mysql_select_db($DataBase) or die(mysql_error());
$string = mysql_real_escape("SELECT * FROM users WHERE email = '$email'");
$query = msql_query($string);
if($query) {
echo mysql_num_rows($query) > 0 ? "YES" : "NO";
} else {
echo("====some error===");
}
?>
mysql_num_rows:http://pt1.php.net/manual/en/function.mysql-num-rows.php mysql_real_escape:http://pt2.php.net/mysql_real_escape_string
答案 2 :(得分:0)
尚未超级安全,但更好。
预准备语句不允许在参数内执行隐藏的mysql代码。
$email = mysql_real_escape($_GET["email"]);
try {
$connect = new PDO("mysql:host=server;dbname=Fily_Registrations;port=3306", "user", "password");
}catch(PDOException $e) {
print "Error!: " . $e->getMessage();
die();
}
$q= "SELECT * FROM users WHERE email = :EMAIL";
$statement = $connect->prepare($q);
$status = $statement->execute(array(":EMAIL"=>$email));
if (($status) && ($statement->rowCount() > 0))
{
echo "YES";
} else {
echo "NO";
}
BR, 卡里