0

我正在学习一些 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();
}

这段代码不像我所描述的那样做。

有人可以解释一下我哪里出了问题,或者可能为这项任务提供更好的解决方案。

提前致谢!

4

2 回答 2

2

您需要先执行查询,因为仅仅准备语句是不够的。请参阅文档,因为它是一个多阶段过程。

首先,您准备声明:

$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
}
于 2012-05-19T10:21:34.910 回答
1

Prepare 不执行该语句。您可以使用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();
    }
}
于 2012-05-19T10:48:51.670 回答