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后加入自己的编码;

    

1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

 

     也可以在PHP脚本中使用。

   




1. header("content-type:text/html; charset=utf-8");   

header("content-type:text/html; charset=utf-8");

    (3)操作数据库时的编码,本例使用UTF8。

   


1. mysql_query("set names utf8",$this->conn);  

mysql_query("set names utf8",$this->conn);

 

    如果数据库使用的GBK,或GB2312,则换成相应的编码。

1. <?php  
2. class
3. var $host;
4. var $user;
5. var $password;
6. var $conn;
7. var $db;
8. /*
9. *构造函数
10. *@param $host 主机名
11. *@param $user 数据库用户
12. *@param $password 数据库密码
13. *@param $db 当前使用的数据库名
14. */
15. function DBOperate($host,$user,$password,$db){
16. $this->host=$host;
17. $this->user=$user;
18. $this->password=$password;
19. $this->db=$db;
20. $this->conn=mysql_connect($this->host,$this->user,$this->password)
21. or die("connect error:".mysql_error());
22. $this->db,$this->conn)
23. or die("switch db error:".mysql_error());
24. "set names utf8",$this->conn);
25. }
26. /*
27. *@param $sql 添加记录的语句
28. *用于插入记录
29. */
30. function Add($sql){
31. $sql,$this->conn) or die("insert error:".mysql_error());
32. }
33. /*
34. *@param $sql 更新记录的语句
35. *用于更新记录
36. */
37. function Update($sql){
38. $sql,$this->conn) or die("update error:".mysql_error());
39. }
40. /*
41. *@param $sql 删除记录的语句
42. *用于删除记录
43. */
44. function Delete($sql){
45. $sql,$this->conn) or die("delete error:".mysql_error());
46. }
47. /*
48. *@param $sql 查询记录的语句
49. *@return $arrs 以一个数组的形式返回数据库中所有记录的结果集
50. *结果如下:Array([0]=>Array(第一条记录) [1]=>Array(第二条记录)...)
51. **/
52. function getRecords($sql){
53. $all=mysql_query($sql,$this->conn);
54. $i=0;
55. while($result=mysql_fetch_array($all)){
56. $arrs[$i]=$result;
57. $i++;
58. }
59. return $arrs;
60. }
61. /*
62. *@param $sql 查询记录的语句
63. *@return $arrs 以一个数组的形式返回所有字段的结果集
64. *结果如下:Array([0]=>字段名 [1]=>字段名...)
65. **/
66. function getFields($sql){
67. $all=mysql_query($sql,$this->conn);
68. $i=0;
69. while($result=mysql_fetch_field($all)){
70. $arrs[$i]=$result->name;
71. $i++;
72. }
73. return $arrs;
74. }
75. function
76. $this->conn);
77. }
78. }
79. $db=new DBOperate("localhost","root","admin","mydb");
80. //$db->Add("insert into news values(null,'新闻依旧','无上智者',now())");
81. $db->getRecords("select * from news"));
82. $result=$db->getFields("select * from news");
83. for($i=0;$i<count($result);$i++){
84. echo $result[$i]."<br />";
85. }
86. $db->Close();
87. ?>