PHP基础(017)---加密,MYSQL数据库,ADODB类库
加密:
PHP加密函数有crypt(),md5()和sha1(),PHP扩展库Mcrypt和Mhash。
MySQL数据库操作:
通过系统服务器和命令提示符(DOS)都可以启动,连接和关闭MYSQL,操作非常简单。(选择“开始”/"运行"命令,在弹出的的"运行"窗口中输入"cmd"命令,按enter键进入DOS窗口。如下)
- net start mysql ---启动mysql (net stop mysql ---停止mysql)
- mysql -uroot -h127.0.0.1 -p ---输入连接MYSQL服务器命令,再然在"Enter password :" 后面输入mysql数据库的密码,即可登陆到mysql
- 或用mysql -uroot -proot ---直接登陆到mysql数据库
- 在DOS界面会出现“welcome to the MySQL monitor." 和 "mysql>" ---表示已成功登陆到mysql数据库
- mysql>ceate database db_nok0503; ---创建数据库"db_nok0503", 注意此时的";"分号不能少
- mysql>drop database db_nok0503; ---删除数据库
- mysql>show databases; ---查看已创建的所有数据库,
- mysql>use db_nok0503; ---选择已创建的某个数据库名
- mysql>create table tb_nok0503(
-> id int auto_increment primary key,
-> user varchar(30) not null,
-> password varchar(30) not null); ---创建表及字段[ 语法: create table table_name (列名1 属性,列名2 属性...); ]
- mysql> show columns from tb_nok0503 from db_nok0503; ---查看表结构show columns或describe(可使用简写desc)
- mysql>alter table tb_nok0503 add e-mail varchar(50) not null,modify user varchar(40); ---修改表结构 alter table(增加一字段,并修改一个字段)
- mysql>rename table tb_nok0503 to tb_user; ---重命名表
- mysql>drop table tb_user; ---删除数据表(如果没有备份是无法恢复的)
- mysql>drop table if exists tb_user; ---先判断然后再删除数据表
- mysql>insert into tb_user(user,password,email) values('张三','1234','zhangshan@sina.com'); ----向数据表中添加数据
- mysql>select * from tb_user; ---查询数据表
- mysql>update tb_user set password='5678' where user='张三'; ---修改数据表
- mysql>delete from tb_user where user='张三'; ---删除记录
- 略...
示例代码如下:(使用show columns)
mysql> show columns from tb_nok0503 from db_nok0503;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user | varchar(30) | NO | | NULL | |
| password | varchar(30) | NO | | NULL | |
+----------+-------------+------+-----+---------+----------------+
3 rows in set (0.18 sec)
示例代码如下:(使用desc)
mysql> use db_nok0503;
Database changed
mysql> desc tb_nok0503;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user | varchar(30) | NO | | NULL | |
| password | varchar(30) | NO | | NULL | |
+----------+-------------+------+-----+---------+----------------+
3 rows in set (0.04 sec)
mysql> desc tb_nok0503 user;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| user | varchar(30) | NO | | NULL | |
+-------+-------------+------+-----+---------+-------+
1 row in set (0.03 sec)
更多mysql命令行操作参考如下:
一、连接MYSQL
格式: mysql -h主机地址 -u用户名 -p用户密码
或者: mysql -u 用户名 -p // 回车后要求输入密码,密码不可见
1、连接到本机上的MYSQL。
首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root -p,回车后提示你输密码.注意用户名前可以有空格也可以没有空格,但是如果-p后带有用户密码,那么-p与密码之间必须没有空格,否则让你重新输入密码.例如以下都是合法的登陆:(帐号:root 密码:123)
mysql -u root -p
mysql -uroot -p
mysql -uroot -p123
如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是: mysql>
2、连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:
mysql -h110.110.110.110 -u root -p 123;(注:u与root之间可以不用加空格,其它也一样)
3、退出MYSQL命令: exit (回车)
二、修改密码。
格式:mysqladmin -u用户名 -p旧密码 password 新密码
1、给root加个密码ab12。首先在DOS下进入目录mysql\bin,然后键入以下命令
mysqladmin -u root -password ab12
注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。
2、再将root的密码改为djg345。
mysqladmin -u root -p ab12 password djg345
(注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符)
3、命令行修改root密码:
mysql> UPDATE mysql.user SET password=PASSWORD(’新密码’) WHERE User=’root’;
mysql> FLUSH PRIVILEGES;
4、显示当前的user:
mysql> SELECT USER();
三、增加新用户。
格式:grant select on 数据库.* to 用户名@登录主机 identified by “密码”
1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用root用户连入
MYSQL,然后键入以下命令:
grant select,insert,update,delete on *.* to test1”%" Identified by “abc”;
但增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了,解决办法见2。
2、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作(localhost指本地主机,即MYSQL数据库所在的那台主机),
这样用户即使用知道test2的密码,他也无法从internet上直接访问数据库,只能通过MYSQL主机上的web页来访问了。
grant select,insert,update,delete on mydb.* to test2@localhost identifiedby “abc”;
如果你不想test2有密码,可以再打一个命令将密码消掉。
grant select,insert,update,delete on mydb.* to test2@localhost identified by “”;
四、操作技巧
1、如果你打命令时,回车后发现忘记加分号,你无须重打一遍命令,只要打个分号回车就可以了。
也就是说你可以把一个完整的命令分成几行来打,完后用分号作结束标志就OK。
2、你可以使用光标上下键调出以前的命令。
五、对数据库的操作
1、显示当前数据库服务器中的数据库列表:
mysql> SHOW DATABASES;
注意:mysql库里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。
2、显示数据库中的数据表:
mysql> USE 库名;
mysql> SHOW TABLES;
3、显示use的数据库名:
mysql> SELECT DATABASE();
4、建立数据库:
mysql> CREATE DATABASE 库名;
5、删除数据库:
mysql> DROP DATABASE 库名;
6、导入.sql文件命令:
mysql> USE 数据库名;
mysql> SOURCE d:/mysql.sql;
也可以在DOS环境下键入以下命令进行导入:
mysql -uroot -proot databasename < databasename.sql
注意:导入前请保证mysql中必须有databasename这个数据库;
六、备份数据库:
注意,mysqldump命令在DOS的 mysql\bin 目录下执行,不能在mysql环境下执行,因此,不能以分号“;”结尾。若已登陆mysql,请运行退出命令mysql> exit
1.导出整个数据库
导出文件默认是存在mysql\bin目录下
mysqldump -u用户名 -p数据库名 > 导出的文件名
mysqldump -uroot -p123456 database_name > outfile_name.sql
2.导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -u user_name -p database_name table_name > outfile_name.sql
3.导出一个数据库结构
mysqldump -u user_name -p -d –add-drop-table database_name > outfile_name.sql
-d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table
4.带语言参数导出
mysqldump -uroot -p –default-character-set=latin1 –set-charset=gbk –skip-opt database_name > outfile_name.sql
七、将文本数据转到数据库中
1、文本数据应符合的格式:字段数据之间用tab键隔开,null值用\n来代替.例:
3 rose 大连二中 1976-10-10
4 mike 大连一中 1975-12-23
假设你把这两组数据存为school.txt文件,放在c盘根目录下。
2、数据传入命令
mysql> load data local infile "c:\school.txt" into table 表名;
注意:你最好将文件复制到mysql\bin目录下,并且要先用use命令打表所在的库。
八、对表的操作
1、显示数据表的结构:
mysql> DESCRIBE 表名; (DESC 表名)
2、建立数据表:
mysql> USE 库名; //进入数据库
mysql> CREATE TABLE 表名 (字段名 VARCHAR(20), 字段名 CHAR(1));
3、删除数据表:
mysql> DROP TABLE 表名;
4、重命名数据表
alter table t1 rename t2;
5、显示表中的记录:
mysql> SELECT * FROM 表名;
6、往表中插入记录:
mysql> INSERT INTO 表名 VALUES (”hyq”,”M”);
7、更新表中数据:
mysql-> UPDATE 表名 SET 字段名1=’a',字段名2=’b’ WHERE 字段名3=’c';
8、将表中记录清空:
mysql> DELETE FROM 表名;
9、用文本方式将数据装入数据表中:
mysql> LOAD DATA LOCAL INFILE “D:/mysql.txt” INTO TABLE 表名;
10、 显示表的定义,还可以看到表的约束,例如外键
mysql> SHOW CREATE TABLE yourtablename ;
还可以通过 mysqldump 将表的完整定义转储到文件中,当然包括外键定义。
还可以通过下面的指令列出表 T 的外键约束:
mysql> SHOW TABLE STATUS FROM yourdatabasename LIKE 'T'
外键约束将会在表注释中列出。
存储过程
11、创建存储过程
CREATE PROCEDURE procedureName (in paramentName type, in paramentName type,……)
BEGIN
SQL sentences;
END
12、调用存储过程
mysql> CALL procedureName(paramentList);
例:mysql> CALL addMoney(12, 500);
13、查看特定数据库的存储过程
方法一:mysql> SELECT `name` FROM mysql.proc WHERE db = 'your_db_name' AND `type` = 'PROCEDURE';
方法二:mysql> show procedure status;
14、删除存储过程
mysql> DROP PROCEDURE procedure_name;
mysql> DROP PROCEDURE IF EXISTS procedure_name;
15、查看指定的存储过程定义
mysql> SHOW CREATE PROCEDURE proc_name;
mysql> SHOW CREATE FUNCTION func_name;
---------- 示例一-----------
mysql> DELIMITER $$
mysql> USE `db_name`$$ //选择数据库
mysql> DROP PROCEDURE IF EXISTS `addMoney`$$ //如果存在同名存储过程,则删除之
mysql> CREATE DEFINER= `root`@`localhost` PROCEDURE `addMoney`(IN xid INT(5),IN xmoney INT(6))
mysql> BEGIN
mysql> UPDATE USER u SET u.money = u.money + xmoney WHERE u.id = xid; //分号";"不会导致语句执行,因为当前的分割符被定义为$$
mysql> END$$ //终止
mysql> DELIMITER ; //把分割符改回分号";"
mysql> call addMoney(5,1000); //执行存储过程
---------- 示例二-----------
mysql> delimiter //
mysql> create procedure proc_name (in parameter integer)
mysql> begin
mysql> if parameter=0 then
mysql> select * from user order by id asc;
mysql> else
mysql> select * from user order by id desc;
mysql> end if;
mysql> end;
mysql> // //此处“//”为终止符
mysql> delimiter ;
mysql> show warnings;
mysql> call proc_name(1);
mysql> call proc_name(0);
九、修改表的列属性的操作
1、为了改变列a,从INTEGER改为TINYINT NOT NULL(名字一样),
并且改变列b,从CHAR(10)改为CHAR(20),同时重命名它,从b改为c:
mysql> ALTER TABLE t2 MODIFY a TINYINT NOT NULL, CHANGE b c CHAR(20);
2、增加一个新TIMESTAMP列,名为d:
mysql> ALTER TABLE t2 ADD d TIMESTAMP;
3、在列d上增加一个索引,并且使列a为主键:
mysql> ALTER TABLE t2 ADD INDEX (d), ADD PRIMARY KEY (a);
4、删除列c:
mysql> ALTER TABLE t2 DROP COLUMN c;
5、增加一个新的AUTO_INCREMENT整数列,命名为c:
mysql> ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT,ADD INDEX (c);
注意,我们索引了c,因为AUTO_INCREMENT柱必须被索引,并且另外我们声明c为NOT NULL,
因为索引了的列不能是NULL
十、一个建库和建表以及插入数据的实例
drop database if exists school; //如果存在SCHOOL则删除
create database school; //建立库SCHOOL
use school; //打开库SCHOOL
create table teacher //建立表TEACHER
(
id int(3) auto_increment not null primary key,
name char(10) not null,
address varchar(50) default ‘深圳’,
year date
); //建表结束
//以下为插入字段
insert into teacher values('','allen','大连一中','1976-10-10');
insert into teacher values('','jack','大连二中','1975-12-23');
如果你在mysql提示符键入上面的命令也可以,但不方便调试。
(1)你可以将以上命令原样写入一个文本文件中,假设为school.sql,然后复制到c:\下,并在DOS状态进入目录\mysql\bin,然后键入以下命令:
mysql -uroot -p密码 < c:\school.sql
如果成功,空出一行无任何显示;如有错误,会有提示。(以上命令已经调试,你只要将//的注释去掉即可使用)。
(2)或者进入命令行后使用 mysql> source c:\school.sql; 也可以将school.sql文件导入数据库中。
PHP连接MYSQL数据库:
- $conn = mysql_connect("localhost","root","root") or die("数据库连接错误".mysql_error()); ---连接MYSQL服务器字符串
- mysql_select_db("db_database1",$conn) or die("数据库连接错误".mysql_error()); ---连接到指定mysql数据库
- mysql_query("set names gb2312"); ---设定字符编码,以屏蔽乱码
- mysql_query($sql,$conn) ; ---执行SQL查询语句并返回结果
- select
- insert into
- update
- delete
- mysql_num_rows() ---返回查询的数据条数
- mysql_affected_rows() ---返回由insert,update,delete语句所影响到的数据行数。
- mysql_fetch_array() ---从数组结果集中获取信息
- mysql_fetch_object() ---从结果集中获取一行作为对象
- mysql_fetch_row() ---逐行获取结果集中的每条记录
- mysql_free_result() ---关闭结果集
- mysql_close() ---关闭MYSQL服务器
解决截取字符串乱码问题:将substr()改成chinesesubstr()函数避免截取字符串乱码。自定义一个chinesesubstr():
1 <?php 2 function chinesesubstr($str,$start,$len) { 3 $strlen=$start+$len; 4 for($i=0;$i<$strlen;$i++) { 5 if(ord(substr($str,$i,1))>0xa0) { 6 $tmpstr.=substr($str,$i,2); 7 $i++; 8 } 9 else 10 $tmpstr.=substr($str,$i,1); 11 } 12 return $tmpstr; 13 } 14 ?>
ADODB类库:
ADODB它是存取数据库所使用到的一组函数。用途之一可以方便的切换数据库。同时ADODB支持MySQL,Oracle,SQL Server,FoxPro,Access,ADO等绝大多数的数据库。下载地址:http://sourceforge.net/projects/adodb/files/adodb-php5-only/
示例一:
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 5 <title>熟悉ADODB</title> 6 <style type="text/css"> 7 <!-- 8 body,td,th { 9 font-size: 12px; 10 } 11 body { 12 margin-left: 10px; 13 margin-top: 10px; 14 margin-right: 10px; 15 margin-bottom: 10px; 16 } 17 --> 18 </style></head> 19 <body> 20 <?php 21 /* 22 (1)载入(include)adodb.inc.php文件 23 要使用ADODB类库,首先是要启动ADODB,启动ADODB的方法就是载入adodb.ini.php文件. 24 */ 25 include_once ('.\adodb5\adodb.inc.php'); 26 /* 27 (2)建立连接 28 建立连接使用到的函数为:ADONewConnection()和NewADOConnection()。 29 */ 30 $conn = ADONewConnection('mysql'); 31 /* 32 (3)连接数据库 33 第二步的建立连接,并没有真正的连接上数据库,需要使用Connect()或PConnect()成员方法来完成最后的链接步骤。Connect()和PConnect()方法的格式是一样的,不同的是:PConnect()方法为持续性链接,而Connect()方法为非持续性链接。 34 Connect($host,[$user],[$password],[$database]) 35 36 参数含义: 37 $host:数据库服务器地址。 38 $user:数据库帐号。 39 $password:帐号密码。 40 $database:连接的数据库。 41 在本实例中,要链接数据库tb_database21,服务器为本机,用户名密码都为root。 42 */ 43 $conn -> PConnect('localhost','root','root','db_book'); 44 //设置编码 45 $conn -> execute('set names gb2312'); 46 /* 47 /*(4)执行SQL语句 48 成功连接数据库后,就可以执行SQL语句对数据库进行操作了。执行SQL语句的方法是Execute()。该方法返回执行SQL语句后的记录集。如果发生错误,则返回false。Execute()方法的格式为: 49 Execute($sql,$inputarr=false) 50 */ 51 $rst = $conn -> Execute('select * from tb_object') or die('执行错误'); 52 53 /* 54 (5)判断结果,并对结果处理 55 第4步执行后,就需要对返回的记录集进行处理了。一般处理结果集时,首先判断EOF属性表明当前的记录指针已经指向了记录集的最后一笔。movenext()方法的作用是将记录指针向下移动一位。 56 */ 57 while(!$rst -> EOF){ //如果没有错误,则配合wihle语句循环输出结果 58 echo $rst -> fields['bigclass'].' '; 59 $rst -> movenext(); //指针下移 60 } 61 62 /* 63 (6)关闭连接 64 当对数据库的操作结束后,需要关闭连接,释放内存。关闭连接的方法是close()。 65 */ 66 $rst -> close(); 67 $conn -> close(); 68 ?> 69 </body> 70 </html>
ADODB使用BeginTrans() , CommitTrans()和RollbackTrans()这3个函数这现处理事务。
问题1:通过CMD连接mysql报错“C:\Users\feng>mysql -uroot -h127.0.0.1 -p
'mysql' is not recognized as an internal or external command,
operable program or batch file. ”
->处理方法:
- 打开Control Panel/System/Advanced/Environment Variables/System Variables/Path/ add path 'C:\Program Files\MySQL\MySQL Server 5.0\bin' ---独立环境
- 打开Control Panel/System/Advanced system settings/Advanced/Environment Variables/System Variables/Path/ 双击"path" 并输入" C:\XAMPP\mysql\bin" ---XAMPP集成环境
================================================================
问题2:如何CMD下备份MySQL数据库命令?
假设mysql 安装在c:盘,mysql数据库的用户名是root,密码是123456,数据库名是database_name,在d:盘根目录下面存放备份数据库,备份数据库名字为backupMysql.sql。
备份数据库:
mysqldump -uroot -p123456 database_name>d:/backupMysql.sql ----
恢复数据库:删除原有数据库,建立数据库,把备份数据库导入。
mysqladmin -uroot -p123456 drop database_name
mysqladmin -uroot -p123456 create database_name
mysql -uroot -p123456 database_name注:在导入备份数据库前,database_name如果没有,是需要创建的;而且与backupMysql.sql中数据库名是一样的才能导入。
补充备份数据库:
mysqldump -uroot -p123456 database_name>;d:/backup.20061215 ---导出备份数据
恢复数据库:
删除原有数据库,建立数据库,把备份数据库导入:
mysqladmin -uroot -p123456 drop database_name
mysqladmin -uroot -p123456 create database_name CHARACTER SET gbk
mysql -uroot -p123456 database_name < d:/backup.20061215 ---导入数据
注意:
在linux系统下备份mysql数据库时有差异,数据库名>后不加分号,如下
mysqldump -uroot -p123456 database_name> d:/backup.20061215
完整的win7 CMD命令下备份mysql数据库方法:
C:\Users\fyi>mysqldump -uroot -p world>;c:\backups\backupmyfile.sql ---win7备份时要加上";"分号 (本示例其密码为空)
Enter password:
=====================================================================
问题3:mysql数据库文件存到XAMPP集成环境什么入径下面?
->>>C:\XAMPP\mysql\data\yourdatabase ---通过phpmyadmin导入的".sql"文件
->>>C:\XAMPP\mysql\bin\yourdatabase ---直接copy数据文件夹存入即可(里面包含有.frm/.MYD/.MYI/.opt文件)
======================================================================
浙公网安备 33010602011771号