既然选择了远方,便只顾风雨兼程~~~

新手学PHP之数据库操作详解及乱码解决!

上一篇 / 下一篇  2006-12-20 21:34:44

查看( 3189 ) / 评论( 17 )
很多朋友新学PHP也许在数据库方面会有点麻烦,尤其是MYSQL4.1.x以后会出现乱码问题。这里写个简单教程,希望对新手有点帮助。也许很多朋友之前是学ASP的(本人也是),有可能怀念ASP的set rs=adodb.recorset(我靠,太久没做ASP,后面的好像有点错,想不起来了!凑活着看吧!)然后就rs.open,rs.movenext...........可是PHPA是依靠很多数据库操作函数来控制,比如:mysql_connect();mysql_select_db();...........那如果页面多,难道要一个个的重复写这些函数???当然不用,现在给大家个数据库操作类,里面包含了大多数,数据库操作的方法,包含基本配置信息,以后大家需要调用数据库信息就直接包含这个页面就可以,下面给出代码及使用方法。
   首先需要两个页面1.config.inc.php代码:

CODE:

   <?php
           
       //数据库参数变量设定
       //$dbhost:主机名
       //$dbuser:连接帐户
       //$dbpassword:连接密码
       //$dbname:数据库名
      //下面已我机子配置为例,
      //请大家根据自己的数据库配置信息配置这个文件即可
      //--------------------------------------------------------------------
       $dbhost="localhost";
       $dbuser="root";
       $dbpassword="7529639";
       $dbname="cr_download";
      //--------------------------------------------------------------------

   ?>
   
另一个就是数据库操作类页面了dbclass.php

CODE:

<?php
//定义数据库操作类
class db{
       //类属性定义
       var $dbhost="localhost";//MYSQL主机
       var $dbuser="root";//连接帐户
       var $password="";//连接密码
       var $dbname="";//数据库名
      //变量引用
       function mysql($dbhost,$dbuser,$password,$dbname){
           $this->dbhost=$dbhost;
           $this->dbuser=$dbuser;
           $this->password=$password;
           $this->dbname=$dbname;
       }
    //创建MYSQL连接
       function mycon(){
        @mysql_connect($this->dbhost,$this->dbuser,$this->password);
    }
    //选择相应的数据库
    function selectdb(){
     @mysql_select_db($this->db);
    }
   
       //创建数据库连接并选择相应数据库
       function createcon(){
           mysql_connect($this->dbhost,$this->dbuser,$this->password);
           mysql_query("SET NAMES 'GBK'");//这是解决乱码的关键哦,LINUX下改为UTF8
           mysql_select_db($this->dbname);
       }
    //执行SQL语句,并返回结果集
       function fetch_array($sql){
           $result=mysql_query($sql);
           return mysql_fetch_array($result);
       }
    //执行SQL语句
    function query($sql){
        return mysql_query($sql);
    }
    //取得结果集数组
    function loop_query($result){
        return mysql_fetch_array($result);
    }
    //关闭数据库连接
    function close() {
        return mysql_close();
    }
   }
?>
下面讲下用法:
如果一个页面要涉及数据库操作,请这样使用:

CODE:

<?php

    include('inc/config.inc.php');//包含数据库基本配置信息
    include('inc/dbclass.php');//包含数据库操作类
   //以下以插入一条数据为例说明,其他操作用法相似
   //-----------------------------------------------------------------------------------
   $db=new db;//从数据库操作类生成实例,OOP还是好啊
   $db->mysql($dbhost,$dbuser,$dbpassword,$dbname);//调用连接参数函数
   $db->createcon();//调用创建连接函数
   //-----------------------------------------------------------------------------------
   //开始插入数据
   //-----------------------------------------------------------------------------------
   $addsql="insert into cr_userinfo values(0,'$username','$userpwd','$time',50,1,'$userquestion','$useranswer')";
   $db->query($addsql);
   echo"<img src=images/pass.gif> <font color=red>恭喜您,注册成功!请点击<a href=login.php>这里</a>登录!</font>";
   $db->close();//关闭数据库连接

?>
好了,看完这篇文章相信新手们可以很好的使用PHP对MYSQL进行基本的数据添加,删除等操作了,而且代码规范,易于维护。祝各位学习愉快,有不懂的就回帖留言,我会第一时间回复^_^。

[本帖最后由 leehui1983 于 2006-12-1 20:58 编辑]

TAG:

大胡子男人 9tmd 发布于2006-12-01 21:12:29
其实关键的就是一句 mysql_query("SET NAMES 'GBK'"); 在connect之后,query之前执行此句。

根本的解决办法,修改my.ini文件,加入简单的两行,之前好像另外有个帖子专门说过这个问题
http://www.phpchina.com/bbs/view ... amp;page=2#pid87439

不过楼主辛苦贴代码,顶一下
辉老大的地盘 leehui1983 发布于2006-12-01 21:22:17
主要给新手看,而且这个帖子的重点不在于解决乱码,而是一种编程风格
86800787的个人空间 86800787 发布于2006-12-01 22:54:54
取得的结果只有一行
把它写成二维数组让它可以读取多行:
cclang发布于2006-12-02 00:22:40
小弟氏新手,据我所知使用mysql_query("set names 'gbk'")
的确能解决乱码问题,但降低效率。
辉老大的地盘 leehui1983 发布于2006-12-02 11:05:03
取得的结果只有一行?这个不可能吧,我一直用得好好得,楼上得说降低效率,也许吧,你有好的方法分享吗?

[ 本帖最后由 leehui1983 于 2006-12-2 11:07 编辑 ]
Phzzy的个人空间 Phzzy 发布于2006-12-02 11:57:20
所有编码都一致,根本不用set names
:)
辉老大的地盘 leehui1983 发布于2006-12-02 14:08:56
感觉linux下更好解决这个问题,我linux下全用utf8编码
辉老大的地盘 leehui1983 发布于2006-12-02 19:20:05
没人顶了啊?自己顶起~~~~呵呵
HeavenWoo发布于2006-12-02 22:04:45
我顶
yyb的个人空间 yyb 发布于2007-03-02 00:06:54
标记下
learner 学习者 发布于2007-03-02 08:30:48
值得一顶,好文章。
maliu发布于2007-05-15 15:54:06
如果数据库是ACCESS那怎么连接???
您这个是对MYSQL数据库的连接.那如何我用的是access数据库的话.那么我改怎么写个类呢?谢谢!
十月GG的“布酪格” 十月冷风 发布于2007-05-15 16:03:40
确实和解决乱码关系不大:lol
ajiu723的个人空间 ajiu723 发布于2007-08-14 18:32:12
//选择相应的数据库
    function selectdb(){
     @mysql_select_db($this->db);
    }
$this ->db 是不是写错了  没有db
应该是$this->dbname吧
ajiu723的个人空间 ajiu723 发布于2007-08-14 19:04:20
笨笨 笨  终于想通了  我收回刚才问的话
luzhou(浅玉)的空间 luzhou 发布于2007-08-14 20:25:06
不错,LZ最近功力增了不少啊。
:)
lucas1860的个人空间 lucas1860 发布于2008-09-19 16:39:06
这两个应该可以合二为一吧。
function mycon(){
        @mysql_connect($this->dbhost,$this->dbuser,$this->password);
    }
  function createcon(){
           mysql_connect($this->dbhost,$this->dbuser,$this->password);
           mysql_query("SET NAMES 'GBK'");//这是解决乱码的关键哦,LINUX下改为UTF8
           mysql_select_db($this->dbname);
       }


这两个应该可以合二为一吧。
我来说两句

(可选)

Open Toolbar