Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在oop php中针对数据库中的重复字段进行验证_Php_Oop_Validation - Fatal编程技术网

在oop php中针对数据库中的重复字段进行验证

在oop php中针对数据库中的重复字段进行验证,php,oop,validation,Php,Oop,Validation,我对php中的面向对象编程有些陌生。目前正在进行接口项目。我有来自数据库的interne_nummer字段。我需要验证这个字段,以检查是否允许存在重复的interne_nummer字段,但不知道如何验证它。我已经发布了一个小代码,我想验证interne_nummer字段,因为我的代码中的其他一切都运行良好 case 'interne_nummer': { /* validate against valid interne_nummer */ $this->interne

我对php中的面向对象编程有些陌生。目前正在进行接口项目。我有来自数据库的interne_nummer字段。我需要验证这个字段,以检查是否允许存在重复的interne_nummer字段,但不知道如何验证它。我已经发布了一个小代码,我想验证interne_nummer字段,因为我的代码中的其他一切都运行良好

 case 'interne_nummer':
 {
    /* validate against valid interne_nummer */
    $this->interne_nummer = trim(strval($value));
    break;
 }
例如,我正在验证一些浮点字段,如下所示,其工作正常:

 case 'schlussrate':            
            {
                /* @todo validate as float*/
                try {
                    $this->{$name} = $this->getFloatValue($value);
                } catch (Execption $e) {
                    $this->{$name} = '';
                    // Throw Exception to higher Level
                    throw new Exeption("Field '".$name."': ".$e->getMessage());
                }               
                break;
             }

 protected function getFloatValue($value) {     
    if (is_numeric($value)) {
        return floatval($value);    
    }
    throw new \Exeption("Value not allowed '".$value."'");
 }  

您可以尝试使用以下函数:

public function exists($detail, $table, $column, $value) {        
        $stmt = $this->mysqli->prepare("SELECT `$detail` FROM `$table` WHERE `$column` = ?");
        $stmt->bind_param('s', $value);
        $stmt->execute();
        $stmt->store_result();

        if($stmt->num_rows >= 1) {
            return true;
        } else {
            return false;
        }
    }
因此,当调用函数时,它可能如下所示:

// "SELECT `interne_nummer` FROM `workers` WHERE `interne_nummer` = '$interne_nummer_val'"
if($class->exists('interne_nummer', 'workers', 'interne_nummer', '$interne_nummer_val')) {
  echo 'Number exists';
} else {
  echo 'Number doesn\'t exists';
}

实际上,这与php无关。在数据库中使用唯一键?如果该字段来自数据库,为什么不能将其标记为
unique
,让数据库注意,不存在重复项?然后运行
SELECT*from table WHERE interne_numer=$value
,查看记录是否已经存在。我真的不明白这里有什么问题。如果你不能做到这一点,那么就查询一下是否存在一个带有该数字的值?它与OOP无关!很抱歉,但请检查更新的问题,即我如何在不更改查询的情况下验证浮点字段,这就是我希望通过验证重复输入的interne\u nummer字段的方式code@ajay如果将显示的getFloatValue()函数更改为也使用此函数。您不需要更改查询,只需添加一个使用新查询的新函数。顺便说一句,它可以很容易地验证许多字段。实际上,字段intern_numer是非常重要的字段,它是我要验证重复条目的唯一字段,因为它就像数据库中的主键一样工作。@ajay但您仍然可以用此函数替换该函数。如果你这样做,它应该工作,你能告诉我这样一种方式如何做到这一点,在例子中给出?我不想使用任何查询,因为此文件仅用于检查我的字段的有效性,我不想在此文件中使用任何查询。只想使用单独的功能来检查重复条目。你知道有什么方法吗?与验证整数值一样,我使用的是\u numeric()方法