我写了一个很长的程序。我只是在这里分享一些台词,以理解一个概念,这是我在这里的问题。我想检查以前的数据是否等于新输入的数据,如果是的话,那么应该出现一个错误,即数据已经输入,而不会再次存储在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. ');发布于 2016-02-22 09:59:29
您还可以使用REPLACE mysql函数。
如果没有,只需使用COUNT()更改请求,并检查返回的结果是否大于0。
我还将高度建议您继续使用PDO,而不是仍然使用mysql_* (它已被废弃/删除)。
发布于 2016-02-22 10:03:29
你可以用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
}发布于 2016-02-22 10:10:44
我在您的代码中看到的问题如下:
对于选择、显示、描述、解释和其他返回结果集的语句,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所指出的,使用不反对使用的函数非常重要,因此,与其使用mysql_query(),不如使用mysqli或PDO functions.For,更详细的信息请阅读this。
https://stackoverflow.com/questions/35550578
复制相似问题