数据库基础语法--php基础最详细教程

来源:互联网 发布:网络安全教育文章 编辑:程序博客网 时间:2024/05/21 02:49

数据库开发篇 原创



MySQL数据库概述


            数据库系统
(database system)


        数据库
(database)


           数据库管理系统
(Database Management
                      system)


               结构化查询语言SQL
(Structured Query Language)


数据定义语言(DDL)


用于定义和管理数据对象,包括数据库、数据表等。例如:CREATE、DROP、ALTER 等语句。


数据操作语言(DML)


用于操作数据库对象中所包含的数据。例如:INSERT、UPDATE、DELETE 语句。


数据查询语言(DQL)


用于查询数据对象中所包含的数据,能够进行单表查询、连接查询、嵌套查询,以及集合查询等
各种复杂程度不同的数据库查询,并将数据返回到客户机中显示。 例如:SELECT 语句


数据控制语言(DCL)


用于管理数据库的语言,包含管理权限及数据库更改。例如:GRANT、REVOKE、COMMIT、ROLLBACK 等语句。


MySQL数据库的常见操作


1.数据库的连接和关闭


命令行下:mysql -h 服务器主机地址 -u 用户名 -p用户密码
              :  mysql -h localhost -u root -p123456
        说明:-u与root 之间可以有或没有空格,-p和密码之间没有空格,
                  为了安全输入完-p回车 然后再提示下输入密码,这样不会有密码历史记录。
        注意:
1.每个SQL命令都需要使用分号来完成
2.可以将一行命令拆成多行
3.可以通过\c来取消本行命令
4.可以通过\q、exit、ctrl+c或者quit来退出当前客户端
                         5.可以通过\s 查看表信息、\G  数据垂直排列


2.创建新用户并授权


GRANT 权限 ON 数据库.数据表 TO 用户名@登录主机 IDENTIFIED BY "密码";
实例:GRANT SELECT,INSERT,UPDATE,DELETE ON *.* phpuser@"%" IDENTIFIED BY "brophp";


3.创建数据库


CREATE DATABASE [IF NOT EXISTS] bookstore; #创建一个名为bookstore的数据库


DROP DATABASE [IF EXISTS] bookstore; #删除一个名为 bookstore 的数据库


SHOW DATABASES;   #显示所有已建立的数据库名称列表


USE bookstore;   #打开 bookstore 数据库为当前数据库使用


4.创建数据表


create table book(
id int(11) unsigned not null primary key auto_increment,
bookname varchar(100) not null default '',
author varchar(50) not null default '',
price double not null default 0.00
);


DESC book;  #查看数据表结构


show tables;  #查看已建立的数据表名称列表


DROP table book;  #删除数据表


ALTER TABLE book rename as bookname;  #更改数据表名称


数据表内容的简单管理


INSERT INTO bookname(bookname,author,price) value('xsphp','glf',47.45);  #插入行记录


INSERT INTO bookname(bookname,author,price) values('pfsj','ly',56.78),('gsp','vilin',88.98);   #连续插入两行记录,可以插入多行


SELECT * FROM bookname;  #查询表中所有记录


UPDATE bookname set price=100.55 WHERE id=1; # 更新数据表行记录


DELETE FROM bookname WHERE id=1;  #删除数据表中的记录


数据库字符集设置


\s  #数据库默认状态信息


Server character(服务器端字符集设置) 注:服务器端字符集需要在my.ini配置文件中设置


Db character(数据库字符集设置) : ALTER DATABASE 数据库名 character set gbk; 或utf8.   


Table character(数据表字符集设置):ALTER TABLE 数据表名 character set gbk; 或utf8.


character_set_client  客户端字符集
character_set_connection 连接字符集
character_set_results 


set names gbk; 或utf8 注:一次可设置这三种字符集


MySQL数据表的设计


什么叫数据表?


数据表是数据库中的基本对象元素,以记录(行)和字段(列)组成的二维结构用于存储数据。
数据表由表结构和表内容两部分组成,先建立表结构,然后才能输入数据。


数据表结构设计


CREATE TABLE 表名称(
字段名1 列类型 [属性] [索引]
字段名2 列类型 [属性] [索引]
. . . . . .
)engine=myisam default charset=utf8 collate utf8_general_ci;
说明:[ ] 属于可选参数,不设置也可以,
engine=myisam default charset=utf8 collate utf8_general_ci
设置 表引擎(表类型)、表字符集、表校对字符集,不写,使用默认值。
建议:SQL语句命令全用大写,其他用小写,以便于区分。离 );最近的一条
           语句不可以加 逗号。 


CREATE TABLE bbs_user(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
        bname varchar(50) NOT NULL DEFAULT '',
        age INT UNSIGNED NOT NULL DEFAULT 10,
        sex char(25) NOT NULL DEFAULT '保密',
        height DOUBLE(6,2) NOT NULL DEFAULT 10.00,
        PRIMARY KEY(id),
        INDEX index_bname(bname)
)engine=myisam default charset=utf8 collate utf8_general_ci;


数据值和列类型


数值类的数据列类型


数值类的数据列类型:
常用的有:TINYINT INT FLOAT DOUBLE 
数据列类型     存储空间        说明                    取值范围
TINYINT        1字节      非常小的整数              带符号:-128~127 无符号:0~255
SMALLINT    2字节       较小的整数 带符号:-32768~32768 无符号:0~65535
MEDIUMINT 3字节       中等大小的整数          带符号:-8388608~8388608 无符号:0~16777215
INT               4字节       标准整数                    带符号:-2147483648~2147483647 无符号:0~4294967295
BIGINT         8字节        大整型                       带符号:-9223372036854775808~9233372036854775807
                                                                                                                                             无符号:0~18446744073709551615
FLOAT         4或8字节    单精度浮点数             最小非零:正负1.175494351E-38
                                                                                                                                             最大非零:正负3.402823466E+38
DOUBLE      8字节         双精度浮点数             最小非零:正负2.2250738585072014E-308
                                                                               最大非零:正负1.7976931348623157E+308
DECIMAL     自定义    以字符串形式表示浮点数  取决于存储单元字节数


字符串类数据列类型


说明:CHAR 主要用于定长的文本类型如性别 ,检索快,占用固定长度。


字符串类数据列类型:
常用类型 CHAR VARCHAR TEXT 
类型                                            存储空间                      说明                                                              最大长度
CHAR[(M)]              M 字节    定长字符串                                                  M字节
VARCHAR[(M)]  L+1字节    可变字符串          M字节
TINYBLOD,TINYTEXT L+1字节非常小的BLOB(二进制大对象)和文本串  2的8次方-1 字节
BLOB,TEXT          L+2字节 小BLOB和文本串      2的16次方-1 字节
MEDIUMBLOB,MEDIUMTEXT L+3字节中等的BLOB和文本串      2的24次方-1 字节
LONGBLOB,LONGTEXT L+4字节大BLOB和文本串      2的32次方-1 字节
ENUM('value1','value2',. . .) 1或2字节枚举:可赋予某个枚举成员          65535 个成员
SET('value1','value2',. . .)           1,2,3,4,或8字节集合:可赋予多个集合成员  64 个成员


日期和时间型数据列类型


说明:建议使用整型列类型存储UNIX时间戳,代替日期和时间列类型,这是基于PHP的WEB项目中最常见的方式。


类型                存储空间       说明                                     最大长度
DATE       3字节YYYY-MM-DD1000-01--01~9999-12-31
TIME   3字节 hh:mm:ss -838:59:59~838:59:59
DATETIME       8字节YYYY-MM-DD hh:mm:ss         1000-01-01 00:00:00 到 9999-12-31 23:59:59
TIMESTAMP   4字节YYYYMMDDhhmmss              19700101000000~2037年的某个时刻
YEAR       1字节YYYY  1901~2155




NULL值


概念上,NULL意味着"没有值"或"未知值",但中不能对NULL值进行算术运算,如果对NULL进行算术运算,其结果还是为NULL.在MySQL中,0或NULL都意味着假而其他值意味着真。布尔运算的默认真 值是1.搜索空用 IS NULL 和 <=>NULL


字段(列)属性


UNSIGNED 


只用于数值类型,不允许数据列中出现负数,也就无符号属性。
该属性放在所有属性前面,否则报错。


ZEROFILL


只用于数值类型,在数值之前自动用0补齐不足的位数。例:将5插入一个声明为int(3)ZEROFILL字段,在之后查询输出将为005.
当一个字段使用ZEROFILL修饰时,该字段自动应用UNSIGNED属性。


AUTO_INCREMENT


设置字段的自动增量属性,每次增加一条记录,该字段的值自动加1,此字段不允许重复。只能修饰整数类型字段。
插入NULL、0 或留空,将自动使用此字段中的最大数值加 1,作为此次的值。
建议不要对设置了此属性的字段进行操作,一般和UNSIGNED NOT NULL PRIMARY KEY .配合使用。


NULL 和 NOT NULL


默认为NULL,即插入值时没有在此字段插入值,默认就为NULL值,如果指定了NOT NULL,则
必须在插入值时在此字段添入值,否则会报错,可以设置DEFAULT属性解决。


DEFAULT


通过此属性来指定一个默认值。如果不添加,将使用设置的默认值。建议和NOT NULL 一起使用,否则可以插入NULL 值。


索引


主键索引:PRIMARY KEY


主键索引加快寻址定位速度,每张表最好都指定一个主键,但一个表只能指定一个主键,而且主键的值不能为空,
不能重复。可以加入一些属性来共同修饰主键字段。
实例1: CREATE TABLE shoptable(
                           id int UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,   用以上属性修饰主键的字段最好。
                           . . . .此处省略
                          );
实例2: CREATE TABLE vilintable(
  id int UNSIGNED NOT NULL AUTO_INCREMENT,
    . . . . 此处省略
                          PRIMARY KEY(id)                         也可以在最后来指定主键。
                     );     


唯一索引:UNIQUE


唯一索引和主键索引一样都可以防止创建重复的值。一个表中只能有一个主键索引,但可以有多个唯一索引
实例1: CREATE TABLE shoptable(
                           id int UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,   用以上属性修饰主键的字段最好。
                           . . . .此处省略
                           tel int NOT NULL UNIQUE
                          );
实例2: CREATE TABLE vilintable(
  id int UNSIGNED NOT NULL AUTO_INCREMENT,
    . . . . 此处省略
                          tel int NOT NULL,
                          PRIMARY KEY(id),                             也可以在最后来指定主键,
                          UNIQUE(tel)                                     也可以在最后来指定 唯一索引,也可以放在主键上面。
                     );     


常规索引:INDEX或KEY


常规索引技术是关系数据查询中最重要的技术,常规索引的合理使用,可以大大提高数据表的查询速度,
缺点是,会增大磁盘空间的使用,降低插入、更新、删除记录的速度




实例1: CREATE TABLE shoptable(
                           id int UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,   
                           uid int NOT NULL KEY key_uid,
  bid int NOT NULL INDEX index_bid,
                           tel int NOT NULL UNIQUE
                          );  ///这个应该是错误写法。。。
实例2: CREATE TABLE carts(
                           id int UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,   
                           uid int NOT NULL ,
             bid int NOT NULL ,
                           tel int NOT NULL UNIQUE,
     KEY key_uid(uid),          //KEY=INDEX 是同义词,都能定义常规索引 
   INDEX index_bid(bid)   //可以写在一起 INDEX index_ids(uid,bid)
                          );   
注意:KEY只能在创建表时使用,来声明常规索引。


单独创建常规索引和删除
实例:CREATE INDEX 索引名 ON 表名(字段名,字段名1...);   //可以一次指定多个字段也可以指定一个字段。
         DROP INDEX 索引名 ON 表名;                             //如果是分别指定就要分别删除。
         ALTER TABLE 表名 ADD INDEX 索引名(字段名);      //可以一次指定多个字段也可以指定一个字段。
         ALTER TABLE 表名 DROP INDEX 索引名;               //如果是分别指定就要分别删除。
        DESC 表名;     //来查看索引情况
        SHOW INDEXES FROM 表名   //查看更现实的索引信息   这里有个一点怎么看?
        


全文索引:FULL TEXT


MyISAM支持,InnoDB不支持。
实例:CREATE TABLE books(
 bookid INT NOT NULL AUTO_INCREMENT,
                          bookName VARCHAR(50) NOT NUL,
                          price DOUBLE NOT NULL,
                         detail TEXT NOT NULL,
                         FULLTEXT (detail),
                  PRIMARY KEY(bookid)         
               );


数据表类型(存储引擎)和存储位置
          ENGINE=表名称


MySQL 支持MyISAM、InnoDB、HEAP、BOB、ARCHIVE、CSV等多种数据表类型。






MyISAM和InnoDB的功能对比


表类型功能对比        MyISAM表                  InnoDB
事务处理                  不支持 支持
数据行锁定      不支持,只要表锁定支持
外键约束   不支持 支持
表空间大小      相对小相对大,最大2倍
全文索引   支持 不支持
COUNT问题 执行COUNT(*)查询时,速度慢


MyISAM和InnoDB两种表类型最为重要:
1.MyISAM数据表类型的特点是成熟、稳定和易于管理。
2.MyISAM表类型会产生碎片空间,要经常使用OPTIMIZE TABLE命令去清理表空间
3.MyISAM不支持事务处理,InnoDB支持
4.MyISAM不支持外键,InnoDB支持
5.MyISAM表类型的数据表效率更高
6.MyISAM表类型的数据表会产生三个文件,InnoDB表类型表默认只会产生一个文件。




存储位置:
      MySQL管理的每个数据库都有自己的数据库目录,它们在/date目录下面的子目录,是与所表示的数据库相同的名称。
MySQL将数据以记录形式存放在表中,而表则以文件的形式存放在磁盘的一个目录中,这个目录就是一个数据库目录。而
MySQL每种表类型在该目录中有不同的文件格式,但是有一个共同点,就是每种表至少有一个存放表结构定义的.frm文件。
一个MyISAM数据表会有三个文件,它们分别是:.frm 结构定义文件,.MYD 数据文件 .MYI索引文件。 而InnoDB由于
采用的表空间的概念来管理数据表,它只有一个与数据库表对应的并以.frm为后缀名的文件,同一个目录下的其他文件表示
为表空间,存储数据表的数据和索引。创建、修改和删除数据表,其实就是对数据库目录下的文件进行操作。


为创建的数据表设置新的数据表类型:CREATE TABLE t1(id int)ENGINE=MYISAM;
修改已有表的表引擎   ALTER TABLE USER ENGINE=INNODB


字符集


概念:将人类使用的自然文字映射到计算机内部二进制的表示方法,是某种文字和字符的集合,主要字符集包括ASCII字符集、ISO-8859字符集、Unicode字符集等。


MySQL5对字符集的支持


设置临时生效字符集,
重新连接会回到默认字符集


服务器端字符集 SET character_set_server = utf8 ;


数据库字符集 SET character_set_database = utf8 ; 


客户端字符集 SET character_set_client = utf8 ;


连接字符集 SET character_set_connection = utf8 


返回结果字符集 SET character_set_results = utf8 ;


设置连接校对字符集 SET collation_connection = utf8_general_ci;  
设置数据库校对字符集 SET collation_database = utf8_general_ci;   
设置服务器校对字符集 SET collation_server = utf8_general_ci;
说明:utf8的默认校对字符集就是utf8_general_ci;
          gbk的默认校对字符集就是gbk_chinese_ci;  ci 不区分大小写,cs区分大小写
          show collation like 'gbk%'  查看gbk校对字符集和默认校对字符集
          show collation like 'utf8%' 查看utf8校对字符集和默认校对字符集
          一般情况下不需要设置校对字符集。默认配置就是最合适的校对字符集。
          一个字符集可以对应多个校对字符集。


查看字符集和默认校对字符集信息:show character set;
查看服务器字符集: show variables like 'character_set_server';
查看服务器校对字符集:show variables like ;collation_server';
查看数据库字符集: show variables like 'character_set_database';
查看数据校对字符集:show variables like 'collation_server';


这三条可以用 set names utf8 来统一设置。
(客户端字符集 SET character_set_client = utf8 ;, 连接字符集 SET character_set_connection = utf8 , 返回结果字符集 SET character_set_results = utf8 ;)


设置永久生效字符集,
需要改变本地my.ini配置文件 


default-character-set=utf8


character-set-server=utf8


更改已有数据库字符集
和已有数据表字符集


实例:ALTER DATABASE 数据库名 CHARACTER SET utf8;


实例:ALTER TABLE 数据表名 CHARACTER SET utf8;


可以对创建数据库、数据表和字段
    进行个性化的字符集设置


实例:CREATE DATABASE IF NOT EXISTS vilinshop DEFAULT CHARACTER SET utf8 [COLLATE utf8_general_ci];


实例:CREATE TABLE  t1(id int)DEFAULT CHARACTER SET UTF8 [COLLATE utf8_general_ci]; 


数据定义语言(DDL)相关命令


CREATE 


创建数据库 CREATE DATABASE [IF NOT EXISTS] 数据库名; //记得要USE下哦。


创建数据表 CREATE TABLE [IF NOT EXISTS] 数据表名(表结构信息...);


创建常规索引 CREATE INDEX 索引名 ON 数据表名(字段名,字段名1...); //多个可用逗号隔开


DROP


删除数据库 DROP DATABASE [IF EXISTS] 数据库名;


删除数据表 DROP TABLE [IF EXISTS] 数据表名;


删除常规索引 DROP INDEX 索引名 ON 数据表名;


ALTER


更改数据表名 ALTER TABLE 原表名 RENAME AS 新表名;


添加表字段 ALTER TABLE 表名 ADD 字段名 字段类型 [属性 索引][AFTER/FIRST 已有字段名]; //在已有字段名后添加
          实例: ALTER TABLE CARTS ADD name VARCHAR(50) NOT NULL DEFAULT '';


修改已有字段 ALTER TABLE 表名 CHANGE 原字段名 新字段名 字段类型 [属性 索引]  
          实例:  ALTER TABLE carts CHANGE NAME names varchar(100);


修改已有字段属性 ALTER TABLE 表名 MODIFY 字段名 字段类型 属性 [索引] 
                 实例:ALTER TABLE carts MODIFY names varchar(50) NOT NULL DEFAULT 'LELE';


删除已有字段 ALTER TABLE 表名 DROP 字段名;
         实例:ALTER TABLE carts DROP names;


 添加一个常规索引 ALTER TABLE 表名 ADD INDEX 索引名(字段名);   
删除一个常规索引 ALTER TABLE 表名 DROP INDEX 索引名;
添加一个唯一索引 ALTER TABLE 表名 ADD UNIQUE 索命名(字段名);
删除一个唯一索引 ALTER TABLE 表名 DROP UNIQUE 索引名;


SQL语句设计


数据操作(DDL)语言


INSERT(插入)增


格式:INSERT INTO 表名(字段1,字段2,字段3....) values('值1', '值2','值3'....); 
说明:表字段不用加引号,值建议都加引号,字符必须加引号。


例1:INSERT INTO bbs_user VALUES('0','vilin','27','男','this is a boy');
说明:表名不给出字段名,VALUES部分要按顺序全部给出值。


例2:INSERT INTO bbs_user(id,name,age,sex,detial) VALUES('null','lili','29','女','my name is lili'),('0','xueer','23','女','my name  is xueer');
说明:可以使用VALUES 一次插入多条语句,语句之间用逗号隔开。


例3:INSERT INTO bbs_user(name,sex,age) VALUES('xiaohong','女','25');
说明:当给出字段时,可以不按顺序指定,但值顺序必须和给出的顺序一致。


例4:INSERT INTO bbs_users select * from bbs_name;


例5:INSERT INTO bbs_users(name,sex) select name,sex from bbs_name;
说明:将搜索的值插入到bbs_users,但是要求字段个数要对应。 


UPDATE(更新)改


格式:UPDATE 表名 SET 字段名1='值1',字段名2='值2'... [where 条件];
说明:如果不写条件默认更新SET 后面字段中所有的值。


例:UPDATE bbs_user SET name='xiaoli' where id=9;


例:UPDATE bbs_user SET name='zhenzhen' where id>20 AND id<30;


DELETE(删除)删


格式:DELETE FROM 表名 [where 条件]
说明:一定要给出条件,不然会删除所有表中数据。 


例1:DELETE FROM bbs_user;
说明:删除表中所有数据,清空表。


例2:DELETE FROM bbs_user WHERE id BETWEEN 10 AND 15 LIMIT 2;
说明:删除id 10到15之间,只按顺序删除两个。 10 11.


数据查询(DQL)语言


SELECT(查询)查


格式:SELECT [ALL|DISTINCT] {*|table.*|[table.]field1[AS alias1][,[table.]field2[AS alias2][,…]]} FROM 表名
                    [WHERE子句]
                    [GROUP BY..][HAVING..][ORDER BY..][LIMIT count];


例1: SELECT * FROM bbs_user; 查询bbs_user所有数据


例2:SELECT id,name,sex FROM bbs_user; 查询bbs_user指定字段数据


例3:SELECT id,name,sex FROM bbs_user WHERE  name='vilin';
查询name='vilin'的行数据。


例4:SELECT id,name,sex FROM bbs_user WHERE  name='vilin' && id=20;
查询条件为name='vilin'并且id=20 的数据。


例5:SELECT id,name,sex FROM bbs_user WHERE id >5 limit 2,2;
limit 2,2 偏移量,显示条数   显示结果为id= 8,id=9的数据。limit 2 显示条数。
实例://分页limit 偏移量公式 $page:当前页码,$pagesize:每页显示数据条数:$offset=($page-1)*$pagesize
                     //limit $offset,$pagesize;


实例:分页显示指定条数
查询id>0的数据,数据中包含username,userpwd 总共要查1条
mysql> select username,userpwd from bbs_users where id>0 limit 1;


查询id>0的数据,从第二条开始取一条,只包含username,userpwd
mysql> select username,userpwd from bbs_users where id>0 limit 1,1;


//分页limit 偏移量公式 $page:当前页码,$pagesize:每页显示数据条数:$offset=($page-1)*$pagesize
//limit $offset,$pagesize;


例6:SELECT DISTINCT username FROM bbs_user;  
过滤username 字段中重名的行。


AS 别名  AS可以省略,中间用空格。
例7: SELECT name as 姓名, age as年龄 FROM bbs_user;
省略写法: SELECT name  姓名, age 年龄 FROM bbs_user; 


多表联合查询:
例8:SELECT u.username  uname,o.username,o.bianhao FROM bbs_order  o,bbs_users  u WHERE o.username = u.username AS可省略。


ORDER BY 排序: SELECT * FROM 表名 [WHERE 条件]  ORDER BY  字段1 ASC|DESC,字段2 ASC|DESC...;  默认ASC省略正序小到大,DESC从大到小。 
例9:SELECT  id,name,age FROM bbs_user WHERE id>10 && id<20 ORDER BY id DESC;


自联合查询:
例10:SELECT a.id aid,a.name aname,b.id bid, b.name bname FROM cats a, cats b WHERE b.pid=a.id;


嵌套查询:(子查询)
例11:SELECT * FROM products where cid in(select id from cats where name like 'j%');


WHERE 条件语句中使用的 :
  1.逻辑运算符 && and    || or      ! not 
                     2.算术运算符 =      != <>不等于    <=    >=     <     >    <=>(跟等号一样,但可以用于空值比较) 
                       3. IS NULL        IS NOT NULL    BETWEEN  AND(比大于小于效率高)     NOT BETWEEN   AND   LIKE     NOT LIKE    AS  LIMIT   IN(逐个检索)
                        4. % 表示0个或任意多个字符      _表示一个字符 (配合like语句使用进行模糊查询)
                            5. count() sum() max() min() avg()   group by 字段 (按字段分组配合count()等统计函数) having  分组后条件
                             


例:SELECT COUNT(*) FROM bbs_user; 查询bbs_user的行数。
     SELECT cid,COUNT(*),price,sum(price),max(price),min(price),avg(price) from products GROUP BY cid HAVING AVG(price) > 500;
     SELECT * FROM products WHERE name LIKE '_ja%';
     SELECT * FROM products WHERE name LIKE '%ja%';
     SELECT * FROM bbs_user WHERE id IN(2,4,5,8,19);
     SELECT name,price,price*0.8 FROM products WHERE id>4 and id<15;


补充内容:
UPDATE bbs_user SET username=md5(username) WHERE id=14; 设置id=14行使用MD5加密。
EXPLAIN 检测 检索语句效率 : EXPLAIN SELECT * FROM bbs_user WHERE id>1000 AND id <1000000;
SELECT version();查看mysql数据库版本
点击量:UPDATE products set num=num+1 WHERE id=27;  点击量刷新就加1.


PHP访问MySQL的扩展函数


说明:index.php主页面,显示数据内容页面。此页面有 添加用户 删除指定用户,修改指定用户功能。
<?php
header('content-type:text/html;charset=utf-8');  
date_default_timezone_set('PRC');
echo '<center><a href="add.php">添加用户</a></center>';
//1.连接数据库
$link = @mysql_connect('localhost', 'root', ''); //or die('连接数据库失败');


//用var_dump($link)测试变量类型,连接成功将返回资源类型。如果连接失败将执行die()语句。
//数据默认开启了任意用户连接。所以只要不指定错误的用户名和密码。都可以返回资源类型。
//echo var_dump($link); 


//也可以使用IF语句来判断,不是一个资源就会输出mysql_errno()(错误号):mysql_error()(错误信息)
if (!$link){
echo 'ERROR:'.mysql_errno().':'.mysql_error();
exit();
}


//2.选择数据库,这是也可以用IF语句判断,这里省略了
mysql_select_db('bbs85');


//3.设置字符集。
mysql_set_charset('uft8');


//4.准备数据,根据具体需要写出适合的select语句
$sql = "select * from bbs_user";


//5发送数据,返回执行结果
$result = mysql_query($sql);
//var_dump($result);


//6判断结果,注,select语句会返回资源结果集,所以要使用mysql_num_rows($result) > 0 查询出来的行数
//查询出来的函数根据select 语句where 条件的不同而不同。
if($result && mysql_num_rows($result) > 0){
 //7,处理数据使用mysql_fetch_assoc($result)
echo '<table border="1" align="center">';
$row = mysql_fetch_assoc($result);
echo '<tr>';
foreach ($row as $key => $value) {

echo '<td>'.$key.'</td>';


}
echo '<td>功能</td>';
echo '</tr>';
//使用mysql_fetch_assoc()返回关联数组数据,mysql_fetch_row()返回索引数组数据,
//mysql_fetch_array()返回混合型数组数据,mysql_fetch_object()返回对象数据
while($row = mysql_fetch_assoc($result)){
echo '<tr>';
echo '<td>'.$row['id'].'</td>';
echo '<td>'.$row['username'].'</td>';
echo '<td>'.$row['email'].'</td>';
echo '<td>'.$row['regtime'].'</td>';
echo '<td><a href="del.php?id='.$row['id'].'">删除</a>|<a href="edit.php?id='.$row['id'].'">修改</a></td>';
echo '</tr>';
}
echo '</table>';
}


//echo mysql_num_rows($result);//输出是查询的记录条数。


//8.释放结果集和数据库
mysql_free_result($result);
mysql_close();  //如果只有一个数据可以省略,多个将不能省略mysql_close




说明:del.php  删除指定行记录页面
<?php


header('content-type:text/html;charset=utf-8');
date_default_timezone_set('PRC');


$id = intval($_GET['id']);
//echo $id; 用来排错。


//1
$link = mysql_connect('localhost', 'root', '') or die('连接数据库失败');


//2
mysql_select_db('bbs85');


//3 
mysql_set_charset('utf8');


//4 
$sql = "delete from bbs_user where id='$id'";


//5
$result = mysql_query($sql);


//6 
if($result && mysql_affected_rows() > 0 ){
echo '删除成功<a href="index.php">返回首页</a>';
}else{
echo '删除失败<a href="del.php?id='.$id.'">继续删除</a>';
}


//7
mysql_close();


说明:edit.php 数据修改页面,修改前,先获取所要修改的数据。
<?php
header('content-type:text/html;charset=utf-8');
date_default_timezone_set('PRC');


$id = intval($_GET['id']);
//1
$link = mysql_connect('localhost', 'root', '') or die('连接数据库失败');


//2
mysql_select_db('bbs85');


//3 
mysql_set_charset('utf8');


//4 
$sql = "select * from bbs_user where id='$id'";


//5
$result = mysql_query($sql);


//6
if($result && mysql_num_rows($result) > 0){
//7
$row = mysql_fetch_assoc($result);
}


?>


<!doctype html>
<html>
<head></head>
<body>
<form action="update.php?id=<?php echo $id; ?>" method="post">
用户名:<input type="text" name="username" value="<?php echo $row['username'] ?>" readonly><br>
邮箱:<input type="text" name="email" value="<?php echo $row['email'] ?>"><br>
<input type="submit"> <br>
</form>
</body>
</html> 


<?php
//8
mysql_free_result($result);
mysql_close();
?>


说明:update.php 使用update 语句进行修改操作
<?php
header('content-type:text/html;charset=utf-8');
date_default_timezone_set('PRC');


$id = intval($_GET['id']);
$email = trim($_POST['email']);
$regtime = time();




//1
$link = mysql_connect('localhost', 'root', '') or die('连接数据库失败');


//2
mysql_select_db('bbs85');


//3 
mysql_set_charset('utf8');


//4 
$sql = "update bbs_user set email='$email',regtime='$regtime' where id='$id'";


//5 
$result = mysql_query($sql);


//6 
if($result && mysql_affected_rows()>0){
echo '修改成功<a href="index.php">返回首页</a>';
}else{
echo '修改失败<a href="edit.php?id='.$id.'">继续修改</a>';
}


//7
mysql_close();


说明:add.php  添加用户  
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>添加用户</title>
</head>
<body>
<form action="save.php" method="post">
用户名:<input type="text" name="username"><br>
邮箱:<input type="text" name="email"><br>
<input type="submit">



</form>
</body>
</html>






说明:获取添加数据的页面进获取的数据进行判断,如果用户名和数据中同名,将重新填写。
<?php
header('content-type:text/html;charset=utf-8');
date_default_timezone_set('PRC');


$username = trim($_POST['username']);
$email = trim($_POST['email']);
$regtime = time();


//1
$link = mysql_connect('localhost', 'root', '') or die('连接数据库失败');


//2
mysql_select_db('bbs85');


//3 
mysql_set_charset('utf8');


//为用户名是否重复进行条件查询
$sql = "select * from bbs_user where username='$username'";
$result1 = mysql_query($sql);
if($result1 && mysql_num_rows($result1) >0){
echo '这个用户名太火了,请换一个吧。<a href="add.php">重新注册</a>';
exit();
}
//4 
$sql = "insert into bbs_user(username,email,regtime) values('$username','$email', '$regtime')";


//5 除了select 语句会返回结果集,其他操作方式都是返回真假值。
$result = mysql_query($sql);


//6
if($result && mysql_insert_id() > 0){
echo '添加成功<a href="index.php">返回首页</a>';
}else{
echo '添加失败<a href="add.php">继续添加</a>';
}


//7所以除了select方式需要关闭mysql_free_result($result);其他方式不需要。
mysql_free_result($result1);
mysql_close();


连接多个数据库实例:


<?php
//多个服务器数据操作方式
$link1 = mysql_connect('localhost','root','') or die("数据库1链接失败");
$link2 = mysql_connect("192.168.120.49",'root','') or die('数据2链接失败');


mysql_select_db('bbs85',$link1);
mysql_select_db('bbs85',$link2);
mysql_set_charset('utf8',$link1);
mysql_set_charset('gbk',$lik2)


$sql = "select * from bbs_user";
$result1 = mysql_query($sql,$link1);
$result2 = mysql_query($sql,$link2);


if($result1 && mysql_num_rows($result1)>0){
$row1 = mysql_fetch_assoc($result1);
}
if($result2 && mysql_num_rows($result2)>0){
$row2 = mysql_fetch_assoc($result2);
}


mysql_close($link1);
mysql_close($link2);


PHP访问MySQL扩展常用函数说明:




1$link = .mysql_connect('localhost', 'root', '');连接数据库 
2.mysql_select_db('bbs85',$link); 选择数据库,如果只有一个数据库可不写$link
3.mysql_set_charset('utf8', '$link'); 设置字符集 ,如果只有一个数据库可不写$link
4.mysql_query();  发送数据返回执行结果,两种可能select语句会返回资源结果集,其他语句返回真假
select语句使用函数:
mysql_num_rows($result) >0; 判断 查询的记录(行)数。
mysql_fetch_assoc($result);   处理结果集,返回关联数组数据
mysql_fetch_row($result);    处理结果集,返回索引数组数据
mysql_fetch_array($result); 处理结果集,返回混合数组数据
mysql_fetch_object($result); 处理结果集,返回对象数据
mysql_free_result($result); 释放结果集, 
insert语句使用函数:
mysql_insert_id() > 0;   判断 插入时新生成的ID
delete、update语句使用函数:
mysql_affected_rows()>0;  判断 语句影响的行数。


mysql_close($link); 关闭数据库如果只有一个数据库 可以不写。




mysql_num_fields($result)或取数据表列数。 字段总列数。
mysql_num_rows($result)获取数据表行数
mysql_field_name 字段名有别名用别名
mysql_data_seek($result,3);移动到第几行开始取。
mysql_errno(); 错误编号
mysql_error();  错误信息
新项目建议用Mysqli +PDO;





0 0
原创粉丝点击