php操作种
php操作类
<?php /**+---------------------- * Mysql操作类+---------------------- * 文件名称 Db.class.php+---------------------- * 文件描述 mysql操作类+---------------------- */class Db{ //数据库连接标识 protected $link = null; //当前操作的表 public $table = ''; //查询参数 protected $options = array(); //当前执行的SQL语句 protected $sql = ''; //用什么编码传递数据 protected $dbCharset = 'utf8'; //缓存路径 protected $cachePath = './cache/'; //缓存扩展名 protected $cacheFileExt = "php"; //缓存文件名 protected $cacheFileName; //是否缓存 protected $cache = false; //缓存更新时间秒数 protected $cacheLimitTime = 60; //数据返回类型, 1代表数组, 2代表对象 protected $returnType = 1; /* * 根据当前动态文件生成缓存文件名 */ function setCacheFileName($fileName) { $cacheFileName = $this->cachePath . strtoupper(md5($fileName)).".".$this->cacheFileExt; $this->cacheFileName=$cacheFileName; } /* * 根据当前动态文件生成缓存文件名 */ function getCacheFileName() { return $this->cacheFileName; } /** * 连接数据库 * * @access public * @param array $db 数据库配置 * @return resource 数据库连接标识 */ public function connect($db){ //根据配置使用不同函数连接数据库 $db['host'] = isset($db['port']) ? $db['host'].':'.$db['port']: $db['host']; $db['char'] = isset($db['char']) ? $db['char']: $this->dbCharset; $func = $db['pconnect'] ? 'mysql_pconnect' : 'mysql_connect'; $this->link = $func($db['host'], $db['user'], $db['pwd']); mysql_select_db($db['database'], $this->link); mysql_query("SET NAMES '{$db['char']}'"); $this->cachePath = isset($db['cachepath']) ? $db['cachepath']: $this->cachePath; return $this->link; } /** * 查询符合条件的一条记录 * * @access public * @param string $where 查询条件 * @param string $field 查询字段 * @param string $table 表 * @return mixed 符合条件的记录 */ public function find($where = NULL, $field = '*', $table = ''){ return $this->findAll($where = NULL, $field = '*', $table = '', FALSE); } /** * 查询符合条件的所有记录 * * @access public * @param string $where 查询条件 * @param string $field 查询字段 * @param string $table 表 * @return mixed 符合条件的记录 */ public function findAll($where = NULL, $field = '*', $table = '', $all = TRUE){ $this->options['where'] = is_null($where) ? @$this->options['where']: $where; $this->options['field'] = isset($this->options['field']) ? $this->options['field']: $field; $this->options['table'] = $table == '' ? $this->table: $table; $sql = "SELECT {$this->options['field']} FROM `{$this->options['table']}` "; $sql .= isset($this->options['join']) ? ' LEFT JOIN '.$this->options['join']: ''; $sql .= isset($this->options['where']) ? ' WHERE '.$this->options['where']: ''; $sql .= isset($this->options['group']) ? ' GROUP BY '.$this->options['group']: ''; $sql .= isset($this->options['having']) ? ' HAVING '.$this->options['having']: ''; $sql .= isset($this->options['order']) ? ' ORDER BY '.$this->options['order']: ''; $sql .= isset($this->options['limit']) ? ' LIMIT '.$this->options['limit']: ''; $this->sql = $sql; $row = NULL; //如果开启了缓存, 那么重缓存中获取数据 if ($this->cache === TRUE){ $this->setCacheFileName($this->sql); $row = $this->readCache(); } //如果读取失败, 或则没有开启缓存 if (is_null($row)){ $result = $this->query(); $row = $all === TRUE ? $this->fetchAll($result): $this->fetch($result); //如果开启了缓存, 那么就写入 if ($this->cache === TRUE){ $this->writeCache($row); } $this->options = array(); } return $row; } /** * 读取结果集中的所有记录到数组中 * * @access public * @param resource $result 结果集 * @return array */ public function fetchAll($result = NULL){ $rows = array(); while ($row = $this->fetch($result)){ $rows[] = $row; } return $rows; } /** * 读取结果集中的一行记录到数组中 * * @access public * @param resource $result 结果集 * @param int $type 返回类型, 1为数组, 2为对象 * @return mixed 根据返回类型返回 */ public function fetch($result = NULL, $type = NULL){ $result = is_null($result) ? $this->result: $result; $type = is_null($type) ? $this->returnType: $type; $func = $type === 1 ? 'mysql_fetch_assoc' : 'mysql_fetch_object'; return $func($result); } /** * 执行SQL命令 * * @access public * @param string $sql SQL命令 * @param resource $link 数据库连接标识 * @return mixed 数据库结果集 */ public function query($sql = '', $link = NULL){ $sql = empty($sql) ? $this->sql: $sql; $link = is_null($link) ? $this->link: $link; $this->result = mysql_query($sql, $link); if (is_resource($this->result)){ return $this->result; } //如果执行SQL出现错误, 那么抛出异常 exit('<strong>Mysql error:</strong>'.$this->getError()); } /** * 执行SQL命令 * * @access public * @param string $sql SQL命令 * @param resource $link 数据库连接标识 * @return bool 是否执行成功 */ public function execute($sql = '', $link = NULL){ $sql = empty($sql) ? $this->sql: $sql; $link = is_null($link) ? $this->link: $link; if (mysql_query($sql, $link)){ return TRUE; } return FALSE; } /** * 插入记录 * * @access public * @param array $data 插入的记录, 格式:array('字段名'=>'值', '字段名'=>'值'); * @param string $table 表名 * @return bool 当前记录id */ public function add($data, $table = NULL){ $table = is_null($table) ? $this->table: $table; $sql = "INSERT INTO `{$table}`"; $fields = $values = array(); $field = $value = ''; //遍历记录, 格式化字段名称与值 foreach($data as $key => $val){ $fields[] = "`{$table}`.`{$key}`"; $values[] = is_numeric($val) ? $val : "'{$val}'"; } $field = join(',', $fields); $value = join(',', $values); unset($fields, $values); $sql .= "({$field}) VALUES({$value})"; $this->sql = $sql; $this->execute(); return $this->insertId(); } /** * 删除记录 * * @access public * @param string $where 条件 * @param string $table 表名 * @return bool 影响行数 */ public function delete($where = NULL, $table = NULL){ $table = is_null($table) ? $this->table: $table; $where = is_null($where) ? @$this->options['where']: $where; $sql = "DELETE FROM `{$table}` WHERE {$where}"; $this->sql = $sql; $this->execute(); return $this->affectedRows(); } /** * 更新记录 * * @access public * @param array $data 更新的数据 格式:array('字段名' => 值); * @param string $where 更新条件 * @param string $table 表名 * @return bool 影响多少条信息 */ public function update($data, $where = NULL, $table = NULL){ $table = is_null($table) ? $this->table: $table; $where = is_null($where) ? @$this->options['where']: $where; $sql = "UPDATE `{$table}` SET "; $values = array(); foreach($data as $key => $val){ $val = is_numeric($val) ? $val : "'{$val}'"; $values[] = "`{$table}`.`{$key}` = {$val}"; } $value = join(',', $values); $this->sql = $sql.$value." WHERE {$where}"; $this->execute(); return $this->affectedRows(); } /** * 读取缓存 * * @access public * @return mixed 如果读取成功返回缓存内容, 否则返回NULL */ protected function readCache(){ $file = $this->getCacheFileName(); if (file_exists($file)){ //缓存过期 if ((filemtime($file) + $this->cacheLimitTime) returnType){ $row = include $file; } else{ $data = file_get_contents($file); $row = unserialize($data); } return $row; } return NULL; } /** * 写入缓存 * * @access public * @param mixed $data 缓存内容 * @return bool 是否写入成功 */ public function writeCache($data){ $file = $this->getCacheFileName(); if ($this->makeDir(dirname($file))){ if (1 === $this->returnType){ $data = '<?php return '.var_export($data, TRUE).';?>'; }else{ $data = serialize($data); } } return file_put_contents($file, $data); } /* * 清除缓存文件 * string $fileName 指定文件名(含函数)或者all(全部) * 返回:清除成功返回true,反之返回false */ function clearCache( $fileName = "all" ) { if( $fileName != "all" ) { if( file_exists( $fileName ) ) { return @unlink( $fileName ); }else return false; } if ( is_dir( $this->cachePath ) ) { if ( $dir = @opendir( $this->cachePath ) ) { while ( $file = @readdir( $dir ) ) { $check = is_dir( $file ); if ( !$check ) @unlink( $this->cachePath . $file ); } @closedir( $dir ); return true; }else{ return false; } }else{ return false; } } /* * 连续建目录 * string $dir 目录字符串 * int $mode 权限数字 * 返回:顺利创建或者全部已建返回true,其它方式返回false */ function makeDir( $dir, $mode = "0777" ) { if( ! $dir ) return 0; $dir = str_replace( "\\", "/", $dir ); $mdir = ""; foreach( explode( "/", $dir ) as $val ) { $mdir .= $val."/"; if( $val == ".." || $val == "." || trim( $val ) == "" ) continue; if( ! file_exists( $mdir ) ) { if([email protected]( $mdir, $mode )){ return false; } } } return true; } //自动加载函数, 实现特殊操作 public function __call($func, $args) { if(in_array($func, array('field', 'join', 'where', 'order', 'group', 'limit', 'having'))) { $this->options[$func] = array_shift($args); return $this; } elseif($func === 'table'){ $this->options['table'] = array_shift($args); $this->table = $this->options['table']; return $this; } //如果函数不存在, 则抛出异常 exit('Call to undefined method Db::' . $func . '()'); }//------------------------------------------- //返回上一次操作所影响的行数 public function affectedRows($link = null){ $link = is_null($link) ? $this->link : $link; return mysql_affected_rows($link); } //返回上一次操作记录的id public function insertId($link = null){ $link = is_null($link) ? $this->link : $link; return mysql_insert_id($link); } //清空结果集 public function free($result = null){ $result = is_null($result) ? $this->result : $result; return mysql_free_result($result); } //返回错误信息 public function getError($link = NULL){ $link = is_null($link) ? $this->link : $link; return mysql_error($link); } //返回错误编号 public function getErrno($link = NULL){ $link = is_null($link) ? $this->link : $link; return mysql_errno($link); }}?>

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Viele Benutzer werden sich bei der Auswahl von Smartwatches für die Marke Huawei entscheiden. Viele Benutzer sind neugierig auf den Unterschied zwischen Huawei GT3pro und GT4. Was sind die Unterschiede zwischen Huawei GT3pro und GT4? 1. Aussehen GT4: 46 mm und 41 mm, das Material ist Glasspiegel + Edelstahlgehäuse + hochauflösende Faserrückschale. GT3pro: 46,6 mm und 42,9 mm, das Material ist Saphirglas + Titangehäuse/Keramikgehäuse + Keramikrückschale 2. Gesundes GT4: Mit dem neuesten Huawei Truseen5.5+-Algorithmus werden die Ergebnisse genauer. GT3pro: EKG-Elektrokardiogramm sowie Blutgefäß und Sicherheit hinzugefügt

Die Verwendung von return in der C-Sprache ist: 1. Für Funktionen, deren Rückgabewerttyp ungültig ist, können Sie die Rückgabeanweisung verwenden, um die Ausführung der Funktion vorzeitig zu beenden. 2. Für Funktionen, deren Rückgabewerttyp nicht ungültig ist, ist die Funktion von Die Return-Anweisung dient dazu, die Ausführung der Funktion zu beenden. 3. Beenden Sie die Ausführung der Funktion vorzeitig wenn die Funktion keinen Wert zurückgibt.

Warum das Snipping-Tool unter Windows 11 nicht funktioniert Das Verständnis der Grundursache des Problems kann dabei helfen, die richtige Lösung zu finden. Hier sind die häufigsten Gründe, warum das Snipping Tool möglicherweise nicht ordnungsgemäß funktioniert: Focus Assistant ist aktiviert: Dies verhindert, dass das Snipping Tool geöffnet wird. Beschädigte Anwendung: Wenn das Snipping-Tool beim Start abstürzt, ist es möglicherweise beschädigt. Veraltete Grafiktreiber: Inkompatible Treiber können das Snipping-Tool beeinträchtigen. Störungen durch andere Anwendungen: Andere laufende Anwendungen können mit dem Snipping Tool in Konflikt geraten. Das Zertifikat ist abgelaufen: Ein Fehler während des Upgrade-Vorgangs kann zu diesem Problem führen. Diese einfache Lösung ist für die meisten Benutzer geeignet und erfordert keine besonderen technischen Kenntnisse. 1. Aktualisieren Sie Windows- und Microsoft Store-Apps

Quellcode: publicclassReturnFinallyDemo{publicstaticvoidmain(String[]args){System.out.println(case1());}publicstaticintcase1(){intx;try{x=1;returnx;}finally{x=3;}}}# Ausgabe Die Ausgabe des obigen Codes kann einfach zu dem Schluss kommen: return wird ausgeführt, bevor wir uns schließlich ansehen, was auf der Bytecode-Ebene passiert. Im Folgenden wird ein Teil des Bytecodes der Methode case1 abgefangen und mit dem Quellcode verglichen, um die Bedeutung jeder Anweisung darin zu kommentieren

Teil 1: Erste Schritte zur Fehlerbehebung Überprüfen des Apple-Systemstatus: Bevor wir uns mit komplexen Lösungen befassen, beginnen wir mit den Grundlagen. Das Problem liegt möglicherweise nicht an Ihrem Gerät; die Server von Apple sind möglicherweise ausgefallen. Besuchen Sie die Systemstatusseite von Apple, um zu sehen, ob der AppStore ordnungsgemäß funktioniert. Wenn es ein Problem gibt, können Sie nur warten, bis Apple es behebt. Überprüfen Sie Ihre Internetverbindung: Stellen Sie sicher, dass Sie über eine stabile Internetverbindung verfügen, da das Problem „Verbindung zum AppStore nicht möglich“ manchmal auf eine schlechte Verbindung zurückzuführen ist. Versuchen Sie, zwischen WLAN und mobilen Daten zu wechseln oder die Netzwerkeinstellungen zurückzusetzen (Allgemein > Zurücksetzen > Netzwerkeinstellungen zurücksetzen > Einstellungen). Aktualisieren Sie Ihre iOS-Version:

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

Vue3.2-Setup-Syntaxzucker ist ein Syntaxzucker zur Kompilierungszeit, der die kombinierte API in einer einzelnen Dateikomponente (SFC) verwendet, um das umständliche Setup in Vue3.0 zu lösen. Die durch den Import eingeführten deklarierten Variablen, Funktionen und Inhalte werden bereitgestellt Rückkehr, damit sie in Vue3.0 verwendet werden können. 1. Es besteht keine Notwendigkeit, deklarierte Variablen, Funktionen und Inhalte zurückzugeben, die durch Import während der Verwendung eingeführt wurden }from'./utils'//variable constmsg='Hello !'//function func

Eingehende Analyse: Was ist der Unterschied zwischen Link und Import? Bei der Entwicklung von Webseiten oder Anwendungen müssen wir häufig externe CSS-Dateien oder JavaScript-Bibliotheken einführen, um unseren Code zu verbessern oder anzupassen. In diesem Prozess sind Verknüpfung und Import zwei häufig verwendete Methoden. Obwohl ihr Zweck darin besteht, externe Ressourcen einzuführen, gibt es einige Unterschiede in der spezifischen Verwendung. Syntax und Speicherort: Link: Verwenden Sie das Link-Tag, um externe Ressourcen in die HTML-Datei zu verlinken, die sich normalerweise am Kopf des HTML-Dokuments befindet
