PHP / MYSQLI - 如何检查此查询是否可行,如果是,则显示错误(参见示例)

时间:2012-05-19 10:04:45

标签: php if-statement mysqli

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

此代码没有按照我的意图执行。

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

提前致谢!

2 个答案:

答案 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();
    }
}