SQL查询验证 - 不是每次都进行测试

时间:2016-01-27 15:02:56

标签: php mysql validation

我有一个php页面,其中javascript从输入到一个insert.php页面传递一串值。

在这个insert.php页面上,我测试传入的电子邮件是否已经存在于数据库中。我的查询在这方面有效,但会发生的是错误被传递回页面并作为验证错误输出。

我想要发生的是在验证错误发送它的输出之后。然后,用户可以更改该字段,然后重试。出于某种原因,我的insert.php页面没有再次检查这个,如果确实如此,它不会让用户输入不同的值来继续。 (错误消息保留在屏幕上,并且不允许通过唯一输入)

我的SQL查询/ php出了什么问题?

$errors = Array();

$sql="SELECT 1 FROM data_table WHERE email = '".$email."' LIMIT 1";
$sth = $db->prepare($sql);
$varcomp = $sth->execute();
if ($varcomp != '0') {
    $errors[] = '<span style="color:red;">Limit one entry per person.</span>';
}


if (sizeof($errors) > 0) {
    $result = array(
    "errors" => implode("<br/>", $errors),
    "success" => 0);
    die(json_encode($result));
}

重申一下,通过验证电子邮件是否已经在数据表中,sql查询第一次正常工作。但是,在它在页面上发出错误并且#34;每人限制一个条目后,即使用户将电子邮件更改为独特的内容,该错误消息也不会消失并赢得&#39; t允许再次检查或提交新的唯一电子邮件。

1 个答案:

答案 0 :(得分:3)

更改您的查询代码:

$sql="SELECT email FROM data_table WHERE email = ? LIMIT 1";
$sth = $db->prepare($sql);
$sth->execute(array($email));
if ($sth->rowCount() != 0) {
    $errors[] = '<span style="color:red;">Limit one entry per person.</span>';
}

使用命名占位符:

$sql="SELECT email FROM data_table WHERE email = :email LIMIT 1"; 
$sth = $db->prepare($sql); 
$sth->execute(array(':email'=>$email));
  • 您需要计算行数,而不仅仅是检查查询是否成功
  • 使用预备陈述