我正在学习一些myqli,想做一个简单的检查。
基本上,用户将输入他们的电子邮件地址然后提交表单,如果电子邮件地址已经包含在某个mysql表中,则脚本必须以错误停止。
这是我的例子:
$userEmail = sanitize($_POST['specials']);
// Check to see if email already exists, if not proceed
if ($stmt = $link->prepare("SELECT email FROM specials WHERE email=$userEmail"))
{
$specialsErrorFocus = 'autofocus="autofocus"';
$specialsInfo = 'This email address: $userEmail, is already in our database.';
include "$docRoot/html/shop/home.html.php";
exit();
}
此代码没有按照我的意图执行。
有人可以解释一下我在哪里出错,或者可能为这项任务提供更好的解决方案。
提前致谢!
答案 0 :(得分:2)
您需要先执行查询,因为只是准备语句是不够的。请参阅documentation,因为这是一个多阶段过程。
首先,您准备声明:
$stmt = $link->prepare("SELECT `email` FROM `specials` WHERE `email` = ?")
if (!$stmt) {
echo $link->errno . " : " . $link->error;
}
接下来,绑定参数:
if (!$stmt->bind_param("s", $userEmail)) {
echo $stmt->errno . " : " . $stmt->error;
}
最后,执行查询:
if (!$stmt->execute()) {
echo $stmt->errno . " : " . $stmt->error;
}
获得结果:
$stmt->store_result();
if ($stmt->num_rows) {
# Email exists
}
答案 1 :(得分:1)
准备不执行声明。您可以使用mysql::query来执行语句。
您的示例将变为:
$result = $link->query("SELECT email FROM specials WHERE email=$userEmail");
if ( $result ) {
if ( $result->num_rows > 0 ) {
$specialsErrorFocus = 'autofocus="autofocus"';
$specialsInfo = 'This email address: $userEmail, is already in our database.';
include "$docRoot/html/shop/home.html.php";
exit();
}
}