php mysql 类
1 <?php 2 /** 3 * MySQL 数据库操作工具类, 方便数据库操作. 4 * 示例见底部注释. 5 * @author: fuck me every day 6 */ 7 class Mysql{ 8 var $conn; 9 var $query_list = array(); 10 public $query_count = 0; 11 12 public function __construct($c){ 13 if(!isset($c['port'])){ 14 $c['port'] = '3306'; 15 } 16 $server = $c['host'] . ':' . $c['port']; 17 $this->conn = mysql_connect($server, $c['username'], $c['password'], true) or die('connect db error'); 18 mysql_select_db($c['dbname'], $this->conn) or die('select db error'); 19 if($c['charset']){ 20 mysql_query("set names " . $c['charset'], $this->conn); 21 } 22 } 23 24 /** 25 * 执行 mysql_query 并返回其结果. 26 */ 27 public function query($sql){ 28 $stime = microtime(true); 29 30 $result = mysql_query($sql, $this->conn); 31 $this->query_count ++; 32 if($result === false){ 33 throw new Exception(mysql_error($this->conn)." in SQL: $sql"); 34 } 35 36 $etime = microtime(true); 37 $time = number_format(($etime - $stime) * 1000, 2); 38 $this->query_list[] = $time . ' ' . $sql; 39 return $result; 40 } 41 42 /** 43 * 执行 SQL 语句, 返回结果的第一条记录(是一个对象). 44 */ 45 public function get($sql){ 46 $result = $this->query($sql); 47 if($row = mysql_fetch_object($result)){ 48 return $row; 49 }else{ 50 return null; 51 } 52 } 53 54 /** 55 * 返回查询结果集, 以 key 为键组织成关联数组, 每一个元素是一个对象. 56 * 如果 key 为空, 则将结果组织成普通的数组. 57 */ 58 public function find($sql, $key=null){ 59 $data = array(); 60 $result = $this->query($sql); 61 while($row = mysql_fetch_object($result)){ 62 if(!empty($key)){ 63 $data[$row->{$key}] = $row; 64 }else{ 65 $data[] = $row; 66 } 67 } 68 return $data; 69 } 70 71 public function last_insert_id(){ 72 return mysql_insert_id($this->conn); 73 } 74 75 /** 76 * 执行一条带有结果集计数的 count SQL 语句, 并返该计数. 77 */ 78 public function count($sql){ 79 $result = $this->query($sql); 80 if($row = mysql_fetch_array($result)){ 81 return (int)$row[0]; 82 }else{ 83 return 0; 84 } 85 } 86 87 /** 88 * 开始一个事务. 89 */ 90 public function begin(){ 91 mysql_query('begin'); 92 } 93 94 /** 95 * 提交一个事务. 96 */ 97 public function commit(){ 98 mysql_query('commit'); 99 } 100 101 /** 102 * 回滚一个事务. 103 */ 104 public function rollback(){ 105 mysql_query('rollback'); 106 } 107 108 /** 109 * 获取指定编号的记录. 110 * @param int $id 要获取的记录的编号. 111 * @param string $field 字段名, 默认为'id'. 112 */ 113 function load($table, $id, $field='id'){ 114 $sql = "select * from `{$table}` where `{$field}`='{$id}'"; 115 $row = $this->get($sql); 116 return $row; 117 } 118 119 /** 120 * 保存一条记录, 调用后, id被设置. 121 * @param object $row 122 */ 123 function save($table, &$row){ 124 $sqlA = ''; 125 foreach($row as $k=>$v){ 126 $sqlA .= "`$k` = '$v',"; 127 } 128 129 $sqlA = substr($sqlA, 0, strlen($sqlA)-1); 130 $sql = "insert into `{$table}` set $sqlA"; 131 $this->query($sql); 132 if(is_object($row)){ 133 $row->id = $this->last_insert_id(); 134 }else if(is_array($row)){ 135 $row['id'] = $this->last_insert_id(); 136 } 137 } 138 139 /** 140 * 更新$arr[id]所指定的记录. 141 * @param array $row 要更新的记录, 键名为id的数组项的值指示了所要更新的记录. 142 * @return int 影响的行数. 143 * @param string $field 字段名, 默认为'id'. 144 */ 145 function update($table, &$row, $field='id'){ 146 $sqlA = ''; 147 foreach($row as $k=>$v){ 148 $sqlA .= "`$k` = '$v',"; 149 } 150 151 $sqlA = substr($sqlA, 0, strlen($sqlA)-1); 152 if(is_object($row)){ 153 $id = $row->{$field}; 154 }else if(is_array($row)){ 155 $id = $row[$field]; 156 } 157 $sql = "update `{$table}` set $sqlA where `{$field}`='$id'"; 158 return $this->query($sql); 159 } 160 161 /** 162 * 删除一条记录. 163 * @param int $id 要删除的记录编号. 164 * @return int 影响的行数. 165 * @param string $field 字段名, 默认为'id'. 166 */ 167 function remove($table, $id, $field='id'){ 168 $sql = "delete from `{$table}` where `{$field}`='{$id}'"; 169 return $this->query($sql); 170 } 171 172 function escape(&$val){ 173 if(is_object($val) || is_array($val)){ 174 $this->escape_row($val); 175 } 176 } 177 178 function escape_row(&$row){ 179 if(is_object($row)){ 180 foreach($row as $k=>$v){ 181 $row->$k = mysql_real_escape_string($v); 182 } 183 }else if(is_array($row)){ 184 foreach($row as $k=>$v){ 185 $row[$k] = mysql_real_escape_string($v); 186 } 187 } 188 } 189 190 function escape_like_string($str){ 191 $find = array('%', '_'); 192 $replace = array('\%', '\_'); 193 $str = str_replace($find, $replace, $str); 194 return $str; 195 } 196 } 197 ?> 198 使用例子: 199 200 <?php 201 // 保存 202 $db->save('table_1', $row); 203 // 更新 204 $db->update('table_1', $row); 205 // 删除 206 $db->remove('table_1', 1); 207 // 查询 208 $rows = $db->find($sql, 'id') 209 ?>
----走出会议室,只有执行力
解决问题是衡量能力的标准。