已经存在数据查询并绕过php mysql中的新条目

Posted

技术标签:

【中文标题】已经存在数据查询并绕过php mysql中的新条目【英文标题】:Already existed data query and bypassing new entry in php mysql 【发布时间】:2016-06-03 16:45:56 【问题描述】:

我写了一个很长的程序。我只是在这里分享一些内容来理解一个概念,这是我的问题。我想检查以前的数据是否等于新输入的数据,如果是,则应该出现数据已经输入的错误,而无需再次存储在db中。以下代码正在运行,但它重复数据。这不太好。请你检查我错在哪里。谢谢

数据库名称预订:

Table Name data:
Name: John, Anjel, Smith, David
CNIC: 33, 46, 33, 91

//// 将数据从 html 表单字段存储到数据库中

<?php

$emp_name = addslashes($_POST['emp_name']);
$emp_cnic = addslashes($_POST['emp_cnic']);

?>

//// 在新的表单提交中选择重复的(已经存在的)CNIC

$already = mysql_query("SELECT CNIC FROM data WHERE CNIC = '$emp_cnic'");

//如果数据已经存在,不存储数据的死脚本。

if($already)
die('Sorry! you are already registered. For any query, contact the  administrator. ');

【问题讨论】:

CNIC int or varchar 数据类型? Please do not use mysql_* functions in code, the mysql extension is officially removed in PHP 7. 改用 PDO 或 mysqli。 【参考方案1】:

你也可以REPLACEmysql函数。

如果不是,只需使用 COUNT() 更改您的请求并检查返回的结果是否大于 0。

我还强烈建议您继续使用 PDO,而不是仍然使用 mysql_*(已弃用/删除)

【讨论】:

将此用于IF条件 if(mysql_num_rows($already) >0 ) die('对不起!您已经注册。如有任何疑问,请联系管理员。'); 谢谢。你能告诉我在给定的情况下如何使用它吗?【参考方案2】:

你可以使用mysql_num_rows

$already = mysql_query("SELECT CNIC FROM data WHERE CNIC = '$emp_cnic'");

$record_count = mysql_num_rows($already );

// $record_count > 0  means data already exist
if( $record_count > 0 ) 
  // Show error 
 else 
  // Save data

【讨论】:

我试过了。它给出此错误并且数据重复或添加数据警告:mysql_num_rows() 期望参数 1 是资源,布尔值在第 29 行的 C:\xampp\htdocs\booking\index.php 中给出 你应该打印你的 sql 查询。您的查询字符串可能有问题。 您可以通过此查询手动检查 SELECT CNIC FROM data WHERE CNIC = 43 ,如果它的工作,那么问题出现在你的 sql 中。【参考方案3】:

我看到的代码问题如下:

对于 SELECT、SHOW、DESCRIBE、EXPLAIN 等语句返回 结果集,mysql_query() 成功返回资源,或 FALSE 错误。

对于其他类型的 SQL 语句,INSERT、UPDATE、DELETE、DROP 等, mysql_query() 成功时返回 TRUE,错误时返回 FALSE。

您在使用mysql_num_rows()时提到的错误是由于查询不成功的错误返回造成的。 您正在检查一个可能不是布尔值的值,以解决此用途:

if(!isset($already) OR mysql_num_rows($already) == 0)
  // die

else
  // do stuff

这会检查查询是否不成功或是否为空,因此您总是会得到一个布尔值来检查您的结果集。

正如@Sakuto 所指出的,使用未弃用的函数很重要,因此,您应该使用mysqliPDO 函数,而不是使用mysql_query()。有关更多信息,请阅读this。

【讨论】:

我使用了上面的代码,但它不能防止重复。请告诉我如何使用mysqli或pdo? 好吧,你应该查看官方manual,我相信你会在那里找到比我能给你的更好的信息:) 只是为了确定,addslashes() 是一个清理函数还是它在字符串中添加了一些东西(比如斜杠)?

以上是关于已经存在数据查询并绕过php mysql中的新条目的主要内容,如果未能解决你的问题,请参考以下文章

Laravel,Mysql重复条目

MySQL:如果表存在,截断并插入 ELSE 创建

PHP数组不会填充mysql数据[重复]

添加新数据时无法从mysql数据库中获取python中的新数据

如何将现有 MySQL 数据库的表复制到没有记录的新数据库?

在mysql中的重复条目上跳过插入