php - 在允许 INSERT 尝试之前重复检查 mysql 表中的数据

标签 php mysql

在使用以下代码将用户输入的 html 表单插入 mysql 数据库之前,我尝试对其进行数据重复检查(主要来自:Best way to test if a row exists in a MySQL table):

$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 列,以防止重复条目。因此,这种重复检查更多是为了向用户提供一种线索,说明如果输入的序列号已经在数据库中,为什么他们尝试插入会被拒绝。

我想我已经掌握了代码片段,但承认因为我已经十多年没有接触过 sql/php,所以我需要获取 RTM 来摆脱一些锈迹。但是,如果这里的问题有快速/明显的解决方法,我将不胜感激。

最佳答案

对于 mysqli_query 函数,返回值将为真,因为“成功的 SELECT、SHOW、DESCRIBE 或 EXPLAIN 查询将返回一个 mysqli_result 对象。对于其他成功的查询,它将返回 TRUE。失败时返回 FALSE”

您的 SQL 将始终成功,因为它要么在存在时返回 1,要么在不存在时返回 0。删除 Exists 如果它不存在则不会返回任何结果,如果你这样做意味着其余代码将工作。

解决方法:

$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');
}

关于php - 在允许 INSERT 尝试之前重复检查 mysql 表中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41668860/

相关文章:

php - HTML Purifier 有选择地吃掉特殊字符

mysql - mysql 中 grails byte[] 属性的数据类型错误

mysql - 我应该使用 mySQL 还是 MongoDB

php - 在 Facebook 应用程序中存储或不存储数据

sql - 按选择第一次出现的字段分组我怎样才能得到最后一个?

php - 用 html/php 显示图像 wamp

php - html表单按钮运行命令php exec

php - 解决INSERT INTO语句的语法错误

php - 我可以在 SwiftMailer 中使用传统的电子邮件 "To"行吗?

php - Datamapper (Overzealous Edition), Codeigniter 和有很多说明