【问题标题】:Already existed data query and bypassing new entry in php mysql已经存在数据查询并绕过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. ');

【问题讨论】:

标签: php html mysql web


【解决方案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() 是一个清理函数还是它在字符串中添加了一些东西(比如斜杠)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-24
  • 1970-01-01
  • 1970-01-01
  • 2020-02-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多