在允许INSERT尝试之前,检查mysql表的数据

时间:2017-01-16 03:02:04

标签: php mysql

我正在尝试使用以下代码(大部分来自:Best way to test if a row exists in a MySQL table)将用户的inpout从html表单实施数据重复检查,然后将其插入到mysql DB中:

$serialNo = $_POST['serialNo'];

$sqldupe = "SELECT EXISTS(SELECT 1 FROM eqpt WHERE serial = '$serialNo')";

    if (mysqli_query($dbcon, $sqldupe)) {
        die('RECORD already exists');
    }

但即使我尝试输入数据库表eqpt中不存在的$ serialNo,我仍然会收到错误消息。

我确实在表中使用UNIQUE选项保护了serialNo列,以防止重复输入。因此,这种欺骗检查更多的是为用户提供一个线索,告诉他们如果输入的serialNo已经在数据库中,他们的尝试插入被拒绝的原因。

我想我已经掌握了这个片段,但承认因为我已经十多年没有触及sql / php了,我需要让RTM摆脱一些生锈。但如果有一个快速/明显的解决方案,我肯定会感谢你的帮助。

2 个答案:

答案 0 :(得分:3)

对于mysqli_query函数,返回值为true,因为"成功的SELECT,SHOW,DESCRIBE或EXPLAIN查询它将返回一个mysqli_result对象。对于其他成功的查询,它将返回TRUE。失败时错误"

您的SQL将始终成功,因为如果存在则返回1,否则返回0。如果不存在,则删除存在将不返回任何结果,如果您确实意味着其余代码将起作用,则不会返回结果。

解决方案:

$serialNo = $_POST['serialNo'];

$result = mysqli_query("SELECT EXISTS(SELECT 1 FROM eqpt WHERE serial = '$serialNo') AS found");

$value = $result->fetch_object();

if ($value->found) {
  die('RECORD already exists');
}

答案 1 :(得分:1)

你可以试试这个

$serialNo = $_POST['serialNo'];

 $sqldupe = "SELECT serial FROM eqpt WHERE serial = '$serialNo'";
if (mysql_num_rows(mysql_query($dbcon, $sqldupe)) > 0) {
    die('RECORD already exists');
}