db = $db; } protected function _getFieldType($tbl, $field_name){ $stmt = $this->db->query("SHOW FIELDS FROM ".$tbl." where Field ='".$field_name."'"); $r = $stmt->fetch(); return $r['Type']; } protected function _getVarCharLength($Type){ $max_field_varchar_length = str_replace(array('varchar(',')'),'', $Type); return$max_field_varchar_length; } protected function _getStringVarCharLength($str){ $stmt = $this->db->query('SELECT LENGTH("'.$str.'") AS len'); $r = $stmt->fetch(); return $r['len']; } protected function _valid_save_update_base($tbl_name, $ary_fields){ # 20190425: So far, only for varchar. // valid start $ary_invalid = array(); # varchar check foreach($ary_fields as$field=>$conf){ $label = $conf[0]; $Type = $this->_getFieldType($tbl_name, $field); if(strpos($Type,'varchar(')===0){ $len = $this->_getVarCharLength($Type); $str = $conf[1]; if($this->_getStringVarCharLength($str)>$len){ $ary_invalid[] = ('"'.$label.'" -
"'.$str.'"
已超出系統儲存長度,請減少字數。'); } } } if($ary_invalid){ $ary_invalid[] = 'Back'; die( implode('
', $ary_invalid) ); } // valid end } protected function _findAll($sql, $entityClass=null){ $stmt = $this->db->query($sql); $results = []; while($row = $stmt->fetch()) { try{ if(!$entityClass){ $results[] = $row; }else{ #https://stackoverflow.com/questions/11884855 $refl = new ReflectionClass($entityClass); $instance = $refl->newInstanceArgs(array($row)); $results[] = $instance; } }catch(Exception $e){ echo $e->getMessage()."
"; } } return $results; } protected function _getOne($sql, $ary_where=array(), $entityClass=null){ $stmt = $this->db->prepare($sql); $result = $stmt->execute($ary_where); $r = $stmt->fetch(); if(!$entityClass){ return $r; } $refl = new ReflectionClass($entityClass); $instance = $refl->newInstanceArgs(array($r)); return $instance; } protected function _save($sql,$ary_parameters=array()){ $stmt = $this->db->prepare($sql); $result = $stmt->execute($ary_parameters); return $this->db->lastInsertId(); } }