PHP+MYSQL操作种
PHP+MYSQL操作类
class dbconn { var $conn = 0; function dbconn($dbhost,$dbuser,$dbpw,$dbname){ $this->conn = mysql_connect($dbhost,$dbuser,$dbpw); !$this->conn && $this->halt("Connect to MySQL failed"); $serverinfo = mysql_get_server_info($this->conn); if ($serverinfo > '4.1' && $GLOBALS['charset']) { mysql_query("SET character_set_connection=".$GLOBALS['charset'].",character_set_results=".$GLOBALS['charset'].",character_set_client=binary",$this->conn); } if ($serverinfo > '5.0') { mysql_query("SET sql_mode=''",$this->conn); } if ($dbname && !@mysql_select_db($dbname,$this->conn)) { $this->halt('Cannot use database'); } } function select_db($dbname){ if (!@mysql_select_db($dbname,$this->conn)) { $this->halt('Cannot use database'); } } function server_info(){ return mysql_get_server_info($this->conn); } function insert_id(){ $arr = $this->fetch_array('SELECT LAST_INSERT_ID() as id'); return $arr["id"]; } function get_value($SQL,$offset=0,$field=0){ $rt = $this->fetch_all($SQL); if (isset($rt[$offset][$field])) { return $rt[$offset][$field]; } return false; } function query($SQL,$method = null,$error = true){ $query = mysql_query($SQL,$this->conn); !$query && $error && $this->halt('Query Error: '.$SQL); return $query; } function fetch_array($SQL){ $query = $this->query($SQL); return mysql_fetch_array($query); } function fetch_all($SQL) { $arr = array(); $query = $this->query($SQL); while($data = mysql_fetch_array($query)) { $arr[] = $data; } return $arr; } function affected_rows(){ return mysql_affected_rows($this->conn); } function num_rows($SQL){ $query = $this->query($SQL); if (!is_bool($query)) { return mysql_num_rows($query); } return 0; } function num_fields($SQL){ $query = $this->query($SQL); return mysql_num_fields($query); } function escape_string($str){ return mysql_escape_string($str); } function free_result(){ $void = func_get_args(); foreach ($void as $query) { if (is_resource($query) && get_resource_type($query)==='mysql result') { mysql_free_result($query); } } unset($void); } function close(){ $this->free_result(); return @mysql_close($this->conn); } function halt($msg=null){ exit($msg.'<br /><br />'.$sql.'<br /> '.mysql_error()); } }
刚刚完成了一个操作PHP的类,看了几天的PHP,感觉操作MYSQL果然很快,而且简单。不过有几个问题要注意:
1、数据库的编码
数据库的创建与PHP脚本必须一致。在这个例子里我用的是UTF8,所以我创建的数据库默认编码是UTF8的。也可以用GBK或GB2312,看自己的需求。不过前提是一定要保持一致,大多数PHP+MYSQL的问题都是由于编码不一致。
2、WEB页面编码
(1)PHP文件的编码也要非常注意。本例中使用的“UTF8”。所以我拿PHP文件用记事本打开是“ANSI”格式的,我就把它另存为“UTF8”格式的。如果是其他格式,就存为相应该的编码文件。不然页面会出现乱码。
(2)PHP页面的编码可以用HTML标签指定,在charset后加入自己的编码;
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
也可以在PHP脚本中使用。
- header("content-type:text/html; charset=utf-8");
(3)操作数据库时的编码,本例使用UTF8。
- mysql_query("set names utf8",$this->conn);
如果数据库使用的GBK,或GB2312,则换成相应的编码。
- <?php
- class DBOperate{
- var $host;
- var $user;
- var $password;
- var $conn;
- var $db;
- /*
- *构造函数
- *@param $host 主机名
- *@param $user 数据库用户
- *@param $password 数据库密码
- *@param $db 当前使用的数据库名
- */
- function DBOperate($host,$user,$password,$db){
- $this->host=$host;
- $this->user=$user;
- $this->password=$password;
- $this->db=$db;
- $this->conn=mysql_connect($this->host,$this->user,$this->password)
- or die("connect error:".mysql_error());
- mysql_select_db($this->db,$this->conn)
- or die("switch db error:".mysql_error());
- mysql_query("set names utf8",$this->conn);
- }
- /*
- *@param $sql 添加记录的语句
- *用于插入记录
- */
- function Add($sql){
- mysql_query($sql,$this->conn) or die("insert error:".mysql_error());
- }
- /*
- *@param $sql 更新记录的语句
- *用于更新记录
- */
- function Update($sql){
- mysql_query($sql,$this->conn) or die("update error:".mysql_error());
- }
- /*
- *@param $sql 删除记录的语句
- *用于删除记录
- */
- function Delete($sql){
- mysql_query($sql,$this->conn) or die("delete error:".mysql_error());
- }
- /*
- *@param $sql 查询记录的语句
- *@return $arrs 以一个数组的形式返回数据库中所有记录的结果集
- *结果如下:Array([0]=>Array(第一条记录) [1]=>Array(第二条记录)...)
- **/
- function getRecords($sql){
- $all=mysql_query($sql,$this->conn);
- $i=0;
- while($result=mysql_fetch_array($all)){
- $arrs[$i]=$result;
- $i++;
- }
- return $arrs;
- }
- /*
- *@param $sql 查询记录的语句
- *@return $arrs 以一个数组的形式返回所有字段的结果集
- *结果如下:Array([0]=>字段名 [1]=>字段名...)
- **/
- function getFields($sql){
- $all=mysql_query($sql,$this->conn);
- $i=0;
- while($result=mysql_fetch_field($all)){
- $arrs[$i]=$result->name;
- $i++;
- }
- return $arrs;
- }
- function Close(){
- mysql_close($this->conn);
- }
- }
- $db=new DBOperate("localhost","root","admin","mydb");
- //$db->Add("insert into news values(null,'新闻依旧','无上智者',now())");
- print_r($db->getRecords("select * from news"));
- $result=$db->getFields("select * from news");
- for($i=0;$i<count($result);$i++){
- echo $result[$i]."<br />";
- }
- $db->Close();
- ?>