<?php
class mysql
{
private $_conn = '';
public function __construct($hostname, $username, $password, $database)
{
if (!$this->_conn = mysql_connect($hostname, $username, $password)) {
exit('Error: Could not make a database connection using ' . $username . '@' . $hostname);
}
if (!mysql_select_db($database, $this->_conn)) {
exit('Error: Could not connect to database ' . $database);
}
mysql_query("SET NAMES 'utf8'", $this->_conn);
mysql_query("SET CHARACTER SET utf8", $this->_conn);
mysql_query("SET CHARACTER_SET_CONNECTION=utf8", $this->_conn);
mysql_query("SET SQL_MODE=''", $this->_conn);
}
public function query($sql)
{
$resource = mysql_query($sql);
if ($resource) {
if (is_resource($resource)) {
$i = 0;
$data = array();
while ($result = mysql_fetch_assoc($resource)) {
$data[$i] = $result;
$i++;
}
mysql_free_result($resource);
$query = new stdClass();
$query->row = isset($data[0]) ? $data[0] : array();
$query->rows = $data;
$query->num_rows = $i;
unset($data);
return $query;
} else {
return true;
}
} else {
exit('Error: ' . mysql_error($this->_conn) . '<br />Error No: ' . mysql_errno($this->_conn) . '<br />' . $sql);
}
}
public function escape($value)
{
return mysql_real_escape_string($value, $this->_conn);
}
public function get_last_id()
{
return mysql_insert_id($this->_conn);
}
public function __destruct()
{
mysql_close($this->_conn);
}
}
使用”SET NAMES utf8″,就是告诉服务器,我用的是utf-8编码, 我希望你也给我返回utf-8编码的查询结果。
mysql_real_escape_string() 和 mysql_escape_string() 的区别是, 它会考虑”当前”字符集 mysql->charset。
mysql_real_escape_string() 在判断宽字符集的字符的时候,就根据这个成员变量来分别采用不同的策略,比如如果是utf-8, 那么就会采用libmysql/ctype-utf8.c。
MySQL字符集设置
• 系统变量:
– character_set_server:默认的内部操作字符集
– character_set_client:客户端来源数据使用的字符集
– character_set_connection:连接层字符集
– character_set_results:查询结果字符集
– character_set_database:当前选中数据库的默认字符集
– character_set_system:系统元数据(字段名等)字符集