zoukankan      html  css  js  c++  java
  • PHP从入门到精通——读书笔记(第16—19章:MySQL数据库基础、PHP操作MySQL、ADODB类库等)

    第十六章:MySql数据库基础

    1:MySql概述
    1)功能强大:提供了多种数据库存储引擎,支持事务、视图、存储过程和触发器
    2)支持跨平台
    3)运行速度快:在Mysql中,使用了B树磁盘表(MyISAM)和索引压缩;
    4)支持各种开发语言:php、asp.net、java、python、ruby、c、c++、perl等
    5)数据库存储容量大:mysql数据库的最大有效表尺寸是由操作系统对文件大小的限制决定的。表空间最大容量64TB

    2:启动、连接、断开和停止MySql服务器(windows平台)
    1)启动:net start mysql
    2)连接:mysql -u root -h 127.0.0.1 -p password (用户名、MySql服务器所在地址、用户密码。服务器地址可不写)
    3)断开:exit、quit
    4)停止:net stop mysql

    3:MySql数据库操作
    1)创建数据库: CREATE DATABASE 数据库名;
    2)查看数据库: SHOW DATABASES;
    3)选择数据库:USE DATABASE
    4)删除数据库:DROP DATABASE

    4:MySql数据表操作
    1)创建数据表:CREATE [TEMPORARY] TABLE [IF NOT EXISTS] 数据表名 [(create_difinition,...)][table_options][select_statement]
    TEMPORARY:如果使用该关键字,表示创建一个临时表。
    create_difinition: col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [PRIMARY KEY] [reference_definition]。如:
    create table table_name (列名1 属性, 列名2 属性...);

    2)查看表结构 SHOW COLUMNS 或 DESCRIBE
    SHOW [FULL] COLUMNS FROM 数据表名 [FROM 数据库名]; 或 SHOW [FULL] COLUMNS FROM 数据表名.数据库名
    DESCRIBE 数据表名(可简写成DES)
    查看某列: DES 数据表名 列名;

    3)修改表结构:ALTER TABLE
    ALTER[IGNORE] TABLE 数据表名 alter_spec [,alter_spec]... (如果指定 IGNORE 时,如果出现重复关键的行,则只执行一行,其他重复的呗删除)
    alter table tb_admin add email varchar(50) not null, modify user varchar(40); (modify是用来修改字句定义字段)
    说明:通过alter修改表列,其前提是必须将表中数据全部删除,然后才可以修改表列

    4)重命名表:RENAME TABLE
    5)删除表:DROP TABLE

    5:MySQL 语句操作
    1)插入记录 insert:insert into 数据表名(column_name,......)values(v1,v2.....)
    2)查询数据库记录 : select selection_list from 数据表名 where ... group by ... order by ... having ... limit...
    (group by:对结果进行分组;order by:对结果进行排序;having:查询时满足的第二条件;limit:限定输出的结果)
    多表查询:select 字段名 from 表1,表2...... where 表1.字段=表2.字段 and 其他查询条件
    3)修改、删除记录:update、delete

    6:MySQL数据库备份和恢复
    要在命令行模式下操作MySQL数据库,必须要对电脑的环境变量进行设置,右击“我的电脑”,选择“属性”,选择“高级”,然后选择“环境变量”。在用户变量的文本框中找到变量PATH并选中,在PATH的变量值文本框中添加:“D:\webpage\AppServ\MySQL\bin”(MySql中bin文件夹的安装路径)
    1)备份:使用MYSQLDUMP命令
    mysqldump -uroot -proot db_databasename>F:\db_databasename.txt
    其中-uroot中的root是用户名,而-proot中的root是密码,db_dabataname 是数据库名。F:\db_databasename.txt 是备份存储的位置

    注意:“-uroot”中是没有空格的,在该命令的结尾处也没有任何的结束符

    2)恢复:mysql -uroot -proot db_database < F:\db_databasename.txt

    第十七章:phpMyAdmin 图形化管理工具


    第十八章:PHP操作MySQL数据库

    1:连接mysql服务器:使用 mysql_connect() 函数

    mysql_connect('hostname', 'username', 'password'); 
    hostname是mysql服务器的主机名(或IP),如果省略端口号,默认为3306

    $link = mysql_connect("localhost","root","root") or die ("不能连接到数据库服务器".mysql_error() );
    
    if ($link) {
           echo "连接成功";
    }

    技巧:在mysql_connect()函数前面添加符号“@”;用于限制这个命令的出错信息的显示

    2:选择mysql数据库:使用 mysql_select_db() 函数 选择mysql数据库服务器上的数据库,并与数据库建立连接

    mysql_select_db ( string 数据库名 [, resource link_identifier] )  或 mysql_query ("use 数据库名"[, resource link_identifier]);
    link_identifier是MySQL服务器的连接标识。如果没有指定连接标识符,则使用上一个打开的连接。如果没有打开的连接,本函数将无参数调用mysql_connect()函数来尝试打开一个并使用。

    $link = mysql_connect ("localhost", "root", "root") or die ("不能连接到数据库服务器".mysql_error() );
    
    //选择数据库db_database18
    $db_selected = mysql_select_db("db_database18", $link);
    
    if ($db_selected){
    
        echo "数据库选择成功";  
    }

    也可以使用$db_selected = mysql_query ("use db_database18", $link);

    3:执行SQL语句:在选择的数据库中使用 mysql_query() 函数执行sql语句

    1)mysql_query ( string query [, resource link_identifier] )
    注意:在mysql_query() 函数中执行的sql语句不应以分号 “;” 结尾

    $result = mysql_query ("insert into tb_member values('tm','111','tm@tmsoft.com' ", $link);
    
    $result = mysql_query ("update tb_member set user = '纯净水', pwd='1025' where user = 'tm' ", $link);
    
    $result = mysql_query ("delete from tb_member where user = '纯净水' ", $link);
    
    $result = mysql_query (" select * from tb_member ", $link);
    
    //显示表结构
    $result = mysql_query (" DESC tb_member ", $link);

    2)使用 mysql_fetch_array() 函数从数组结果集中获取信息

    array mysql_fetch_array ( resource result [, int result_type] )
    result:资源类型的参数,要传入的是由mysql_query()函数返回的数据指针
    result_type:可选项,整数型参数,要传入的是MYSQL_ASSOC(关联索引)、MYSQL_NUM(数字索引)、MYSQL_BOTH(包含以上2种,默认)
    注意:本函数返回的字段名区分大小写

    View Code
    $sql = mysql_query("select * from tb_book");
    
    $info = mysql_fetch_array($sql);
    
    if ($_POST[submit] == "查询"){
    
            $txt_book = $_POST[txt_book];
    
            $sql = mysql_query("select * from tb_book where bookname like '%".trim($txt_book)."%'  ");
    
            $info = mysql_fetch_array($sql);
    }

    3)使用 mysql_fetch_object() 函数从结果集中获取一行作为对象

    object mysql_fetch_object ( resource result )——返回的是一个对象而不是数组,通过字段名访问数组: $row -> col_name 
    注意:本函数区分大小写

    4)使用 mysql_fetch_row() 函数逐行获取结果集中的每条记录

    array mysql_fetch_row ( resource result )
    与mysql_fetch_array()函数区别是:使用从0开始的数字下标。
    区分大小写

    5)使用 mysql_num_rows() 函数获取查询结果集中的记录数

    int mysql_num_rows ( resource result )

    PHP分页:

    View Code
    <html>
    <head>
    <title>公告信息管理</title>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <link href="css/style.css" rel="stylesheet">
    </head>
    <body>
    <table width="828" height="522" border="0" align="center" cellpadding="0" cellspacing="0" id="__01">
        <tr>
            <td background="images/image_01.gif">&nbsp;            </td>
            <td height="140" background="images/image_02.gif">&nbsp;            </td>
        </tr>
        <tr>
            <td width="202" rowspan="3" valign="top"><table width="202" border="0" cellspacing="0" cellpadding="0">
              <tr>
                <td><?php include("menu.php");?></td>
              </tr>
            </table></td>
            <td height="34" background="images/image_04.gif">&nbsp;            </td>
        </tr>
        <tr>
            <td height="38" background="images/image_06.gif">&nbsp;            </td>
        </tr>
        <tr>
            <td height="270" valign="top">
                <table width="626" height="100%" border="0" cellpadding="0" cellspacing="0">
                  <tr>
                    <td height="257" align="center" valign="top" background="images/image_08.gif"><table width="600" height="271"  border="0" cellpadding="0" cellspacing="0">
                      <tr>
                        <td height="22" align="center" valign="top" class="word_orange"><strong>公告信息<strong>分页显示</strong></strong></td>
                      </tr>
                      <tr>
                        <td height="249" align="center" valign="top">
                        <table width="550" border="1" cellpadding="1" cellspacing="1" bordercolor="#FFFFFF" bgcolor="#999999">
                          <tr align="center" bgcolor="#f0f0f0">
                            <td width="221">公告标题</td>
                            <td width="329">公告内容</td>
                          </tr>
                        <?php
                        $conn=mysql_connect("localhost","root","root") or die("数据库服务器连接错误".mysql_error());
                        mysql_select_db("db_database18",$conn) or die("数据库访问错误".mysql_error());
                        mysql_query("set names gb2312");
                        /*  $page为当前页,如果$page为空,则初始化为1  */
                        if ($page==""){
                            $page=1;}
                           if (is_numeric($page)){
                            $page_size=4;                                     //每页显示4条记录
                            $query="select count(*) as total from tb_affiche  order by id desc";   
                            $result=mysql_query($query);                          //查询符合条件的记录总条数
                            $message_count=mysql_result($result,0,"total");        //要显示的总记录数
                            $page_count=ceil($message_count/$page_size);          //根据记录总数除以每页显示的记录数求出所分的页数
                            $offset=($page-1)*$page_size;                        //计算下一页从第几条数据开始循环  
                            $sql=mysql_query("select * from tb_affiche order by id desc limit $offset, $page_size");
                            $row=mysql_fetch_object($sql);
                            if(!$row){
                                echo "<font color='red'>暂无公告信息!</font>";
                            }
                            do{
                            ?>
                          <tr bgcolor="#FFFFFF">
                            <td><?php echo $row->title;?></td>
                            <td><?php echo $row->content;?></td>
                          </tr>
                        <?php
                            }while($row=mysql_fetch_object($sql));
                        }
                        ?>
                         </table>
                          <br>
                          <table width="550" border="0" cellspacing="0" cellpadding="0">
                            <tr>
                              <!--  翻页条 -->
                                <td width="37%">&nbsp;&nbsp;页次:<?php echo $page;?>/<?php echo $page_count;?>页&nbsp;记录:<?php echo $message_count;?> 条&nbsp; </td>
                                <td width="63%" align="right">
                                <?php
                                /*  如果当前页不是首页  */
                                if($page!=1){
                                /*  显示“首页”超链接  */
                                echo  "<a href=page_affiche.php?page=1>首页</a>&nbsp;";
                                /*  显示“上一页”超链接  */
                                echo "<a href=page_affiche.php?page=".($page-1).">上一页</a>&nbsp;";
                                }
                                /*  如果当前页不是尾页  */
                                if($page<$page_count){
                                /*  显示“下一页”超链接  */
                                echo "<a href=page_affiche.php?page=".($page+1).">下一页</a>&nbsp;";
                                /*  显示“尾页”超链接  */
                                echo  "<a href=page_affiche.php?page=".$page_count.">尾页</a>";
                                }
                                mysql_free_result($sql);
                                mysql_close($conn);
                                ?>
                            </tr>
                          </table></td>
                      </tr>
                    </table></td>
                  </tr>
                </table>            </td>
        </tr>
        <tr>
            <td bgcolor="#F0F0F0"></td>
            <td height="43" background="images/image_12.gif"></td>
        </tr>
    </table>
    </body>
    </html>

    注意:在连接数据库时,一定要使用 mysql_query("set names gb2312")函数设置数据库的编码格式(也可以设置为其他编码)。通过该设置可以避免在输出中文字符串时出现乱码。

    4:关闭结果集:数据库操作完成后,需要关闭结果集以释放资源—— mysql_free_result ($result);

    技巧:如果在多个网页中都要频繁进行数据库访问,则可以建立与数据库服务器的持续连接来提高效率。因为每次与数据库服务器的连接需要较长的时间和较大的开销。建立持续连接的方法:调用 mysql_pconnect() 代替 myslq_connect()。建立的持续连接在本程序结束时,不需要调用 mysql_close()来关闭。下次程序再次执行 mysql_pconnect() 函数时,系统自动直接返回已经建立的持续连接的ID号,而不再去真的连接数据库。

    5:关闭MySQL服务器——完成数据库操作后,应该使用 mysql_close() 函数关闭与MySQL服务器的连接: mysql_close ($Link);
    说明:PHP与数据库的连接是非持久连接,系统会自动回收,一般不用设置关闭。但如果一次性返回的结果集比较大,或网站访问量比较多,则最好使用mysql_close() 函数手动进行释放。

    第十九章:ADODB类库

    1:概述——ADODB:Active Data Objects Data Base,它是存取数据库所用到的一组函数,此函数库用来隐藏不同数据库函数间的差异,让开发者可以很简单地去切换数据库。要使用ADODB来操作数据库,首先下载ADODB类库包,将其解压到Web服务器目录下,然后调用ADODB中的文件即可

    2:使用ADODB操作MySQL

    View Code
    /*    
    (1)载入(include)adodb.inc.php文件
    要使用ADODB类库,首先是要启动ADODB,启动ADODB的方法就是载入adodb.ini.php文件.
    */
    include_once ('../adodb5/adodb.inc.php');
    /*
    (2)建立连接
    建立连接使用到的函数为:ADONewConnection()和NewADOConnection()。
    */
    $conn = ADONewConnection('mysql');
    /*
    (3)连接数据库
    第二步的建立连接,并没有真正的连接上数据库,需要使用Connect()或PConnect()成员方法来完成最后的链接步骤。Connect()和PConnect()方法的格式是一样的,不同的是:PConnect()方法为持续性链接,而Connect()方法为非持续性链接。
    Connect($host,[$user],[$password],[$database])
    
    参数含义:
        $host:数据库服务器地址。
        $user:数据库帐号。
        $password:帐号密码。
        $database:连接的数据库。
    在本实例中,要链接数据库tb_database21,服务器为本机,用户名密码都为root。
    */
    $conn -> PConnect('localhost','root','root','db_database21');
    //设置编码
    $conn -> execute('set names gb2312');
    /*
    /*(4)执行SQL语句
    成功连接数据库后,就可以执行SQL语句对数据库进行操作了。执行SQL语句的方法是Execute()。该方法返回执行SQL语句后的记录集。如果发生错误,则返回false。Execute()方法的格式为:
    Execute($sql,$inputarr=false)
    */
    $rst = $conn -> Execute('select * from tb_object') or die('执行错误');
    
    /*
    (5)判断结果,并对结果处理
    第4步执行后,就需要对返回的记录集进行处理了。一般处理结果集时,首先判断EOF属性表明当前的记录指针已经指向了记录集的最后一笔。movenext()方法的作用是将记录指针向下移动一位。
    */
        while(!$rst -> EOF){                    //如果没有错误,则配合wihle语句循环输出结果
            echo $rst -> fields['bigclass'].' ';    
            $rst -> movenext();                    //指针下移
        }
        
    /*
    (6)关闭连接
    当对数据库的操作结束后,需要关闭连接,释放内存。关闭连接的方法是close()。
    */
    $rst -> close();
    $conn -> close();

    也可以通过数据源名称(DSN)的方式进行连接,代码如下:

    include_once('../adbdb5/dbodb.inc.php');
    $conn = ADONewConnection('mysql://root:root@localhost/db_database19');

    使用ODBC连接MSSQL数据库

    include_once('../adodb5/adodb.inc.php');
    $conn = ADONewConnection('odbc_mssql');
    $conn->PConnect("Driver={SQL Server};Server=localhost;Database=mydb; ", 'username', 'password');
  • 相关阅读:
    HDU 5492 Find a path
    codeforce gym 100548H The Problem to Make You Happy
    Topcoder SRM 144 Lottery
    codeforce 165E Compatible Numbers
    codeforce gym 100307H Hack Protection
    区间DP总结
    UESTC 1321 柱爷的恋爱 (区间DP)
    HDU 4283 You Are the One (区间DP)
    HDU 2476 String painter (区间DP)
    UESTC 426 Food Delivery (区间DP)
  • 原文地址:https://www.cnblogs.com/mumue/p/2846054.html
Copyright © 2011-2022 走看看