数据库基础语法--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
- 数据库基础语法--php基础最详细教程
- PHP基本语法--php基础最详细教程
- 字符串函数--php基础最详细教程
- 数组函数--php基础最详细教程
- 正则表达式--php基础最详细教程
- 会话控制--php基础最详细教程
- 文件系统--php基础最详细教程
- php错误处理--php基础最详细教程
- PHP的日期和时间--php基础最详细教程
- php动态图像处理--php基础最详细教程
- 流程控制与函数应用--php基础最详细教程
- PHP入门最基础语法
- PHP自学教程之PHP语法基础
- PHP、MySQL最基础的教程
- 【php】php语法基础
- java最基础语法
- FreeMarker 基础语法教程
- FreeMarker基础语法教程
- (?:pattern) (?=pattern) (?!pattern)
- JQuery 的选择器可谓之强大无比
- 计算几何资料、
- javaScript中的异常
- iOS开发地图系列篇(一)
- 数据库基础语法--php基础最详细教程
- 字节对齐
- C++中的accumulate
- OpenCV 边缘检测
- 让你变懒的 Android Studio Live Templates
- 【2016年年中总结】——你变成了你喜欢的样子了吗?
- jdk6.0与7.0的区别
- 虚基态程序
- 基于windows的mysql读写分离和amoeba配置