已经存在数据查询并绕过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】:
你也可以REPLACE
mysql函数。
如果不是,只需使用 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 所指出的,使用未弃用的函数很重要,因此,您应该使用mysqli
或PDO
函数,而不是使用mysql_query()。有关更多信息,请阅读this。
【讨论】:
我使用了上面的代码,但它不能防止重复。请告诉我如何使用mysqli或pdo? 好吧,你应该查看官方manual,我相信你会在那里找到比我能给你的更好的信息:) 只是为了确定,addslashes()
是一个清理函数还是它在字符串中添加了一些东西(比如斜杠)?以上是关于已经存在数据查询并绕过php mysql中的新条目的主要内容,如果未能解决你的问题,请参考以下文章
添加新数据时无法从mysql数据库中获取python中的新数据