操作mysql(一)

/**
燕十八 公益PHP培训
课堂地址:YY频道88354001
学习社区:www.zixue.it
**/

 

1:mysql是什么?
答:mysql是一种开源的,小型的数据库
和PHP结合的非常紧密

比较流行的LAMP组合 指 linux apache mysql php


2:我怎么样用Mysql?
答:下载mysql并安装,
装完之后,你的机器上,就有一个mysql程序始终在运行,
这个程序可以放置你的数据。


3:PHP和mysql是什么关系?
答:php是php,mysql是mysql
但是,php可以接到上mysql,
并且操作mysql

4: 连接上mysql很容易,
但连接上mysql之后,操作mysql,存、取,删,改数据
mysql增删改查数据又有mysql自身的语法。

即:连上mysql容易,但连上后
你要会基本的增删改查 sql语句

5:我对mysql比较生怎么办?
答:百度“燕十八 mysql”,下载41集教程,恶补。


在讲完小项目之后,会考虑系统的讲解mysql。

6:我安装Mysql都不太会呢?
答:老师演示一遍。
你可以自己装,也可以装集成包,比如wamp

(因为apache+php+mysql的配置挺麻烦,新手建议先装个集成包,等PHP入门后,再琢磨单独安装的方法)

 

7:在命令行下,连接上mysql,
这个黑窗口只是一个客户端。
就像QQ与腾迅服务器的关系。


8:服务器就在那里,不远不近,不来不去。
客户端去连服务器,要满足服务器的连接规范。

反过来讲:能满足服务器的连接规范,进行连接,就可以称之为客户端。

9:问:客户端只有一种吗?
比如 mysql.exe黑窗口,是mysql软件自带的客户端,
还有navcat,mysqlfront,等等

就像apache是服务器,浏览器就是客户端,而浏览器多种多样
有chrome,firefox,IE,....

10:我们接下来要用php去连接mysql
自然php也充当了客户端的角色。


具体如何用PHP连接mysql呢?
请看代码

 

/**
燕十八 公益PHP培训
课堂地址:YY频道88354001
学习社区:www.zixue.it
**/

 

// PHP连接mysql, 并学习资源型变量


/**
PHP想操作mysql,得先连接上Mysql服务器

1:连接需要哪些要素?
答:服务器的地址,用户名,密码,端口

2:怎么连
答:用mysql_connect()函数来连

3:返回什么值?
**/


/*
resource mysql_connect ([ string $server [, string $username [, string $password [, bool $new_link ]]]] )

$server: 服务器的地址[域名/ip],不写一般默认是localhost
$username: 账号
$password: 密码
$new_link: 是否重新连接
*/

$conn = mysql_connect('localhost','root','111111');

if($conn) {
print_r($conn);
} else {
echo '没连上';
}


$other = mysql_connect('localhost','root','111111');
if($other) {
print_r($other);
} else {
echo '没连上';
}


/*
$conn,与$other的打印的资源一样
这是因为:
出于减少连接的目的,
对于同样的参数的mysql_connect调用,
返回的是一个资源
*/

 

/*
如果我偏要连2次,得到2个不同的资源,
用第4个参数 为true
强制重新连接,得到一个新资源
*/

$conn3 = mysql_connect('localhost','root','111111',true);
if($conn3) {
print_r($conn3);
} else {
echo '没连上';
}


/**
mysql对外连接,和apache一样,
需要占用一个端口
(端口就是商场的柜台号,你想为客户服务,你得租个柜台)

mysql默认占用的3306,因为,我们在mysql_connect中并没有指定端口,
而PHP会用3306来进行连接

如果,你的mysql服务器端口偏是3307,如何指定
答:mysql_connect('localhost:3307','root','111111');
**/

/***
在PHP中,只能用mysql_connect函数才能连上mysql服务器呢?
答:还可以用mysqli和PDO


mysql_connect系列函数,是面向过程的写法
mysqli则是把连接mysql的功能封装成类,是面向对象的写法.

问:如果连接oracle数据库和sqlserver数据库,又用什么函数?
答:可以用oci_*系列函数 和 mssql_*系列函数

问:太麻烦了,要是换服务器了,岂不是我的程序要重写?
答:不用怕,PDO则是一个统一的数据库接口.
对于程序来说,屏蔽了数据库之间的不一致,
无论什么数据库,用PDO的写法都一致.

另:PDO也是面向对象的用法.


因此:我们讲mysql_*系列面向过程的函数,
后面会讲通用的PDO

而mysqli夹在中间,我们不讲.
***/


/***
我要是调用 mysql_connect()函数时,
直接提示我 undefined function (调用了未定义的函数),该如何处理?

答:这是因为 你的PHP.ini里,没有引入mysql的扩展

问:怎么引入
答:打开php.ini,
找到下面2句,把前面的;去掉,并重启apache就可以了.
;extension=php_mysql.dll
;extension=php_mysqli.dll


***/

/**
燕十八 公益PHP培训
课堂地址:YY频道88354001
学习社区:www.zixue.it
**/

 

/*
问: 资源型变量是什么东西?
答: 资源就是一个管道

以PHP连接mysql为例

PHP<------->mysql服务器
PHP和mysql之间打通了连接,有一个通道
PHP要操作mysql,得沿着通道走.


一旦连接上mysql之后,即通道形成之后
我们就可以沿着通道发送sql语句
*/


/**
连上数据库很简单,是不是我已经会操作Mysql了?
答:不是的.
连上数据库,只是一个中国人和一个美国人接上头了.

之后想做生意上,赚美国人的钱,还得会说英语.
即:连上mysql后,你还得会sql语句.

**/


// 连上之后,如何发送sql语句进行查询呢?

/*
只要是合法的sql语句,都可以通过通道发送给mysql服务器查询
具体用: mysql_query()函数
*/

 

// 连接
$conn = mysql_connect('localhost','root','111111');

if(!$conn) {
echo '连接失败';
exit;
}


// 选库
$sql = 'use test';
// 发送sql,进行查询
$rs = mysql_query($sql,$conn); // 沿着conn通道进行查询


// 设置字符集,此处PHP是客户端,我们的PHP是utf-8编码的.
// 因此要告诉服务器 set names utf8
$sql = 'set names utf8';
mysql_query($sql,$conn);


// 增加一条数据
$id = rand(1,100);
$sname = substr(str_shuffle('abcdefghijklmnopqrstuvwxyz'),0,6);

$sql = "insert into stu values ($id,'$sname','$sname')";
$rs = mysql_query($sql,$conn);

if($rs) {
echo '又多了一个学生';
} else {
echo '添加数据失败';
}

/**
燕十八 公益PHP培训
课堂地址:YY频道88354001
学习社区:www.zixue.it
**/

 

// 删除学生

// 连接服务器

$conn = mysql_connect('localhost','root','111111');
if(!$conn) {
echo '连接失败';
exit;
}


// 选库
$sql = 'use test';
// 发送sql,进行查询
$rs = mysql_query($sql,$conn); // 沿着conn通道进行查询


// 设置字符集
$sql = 'set names utf8';
mysql_query($sql,$conn);

// 接收地址栏的id,传几号id,就删几号会员
$id = isset($_GET['id'])?$_GET['id']:0;

// 形成删除用的sql语句
$sql = 'delete from stu where id=' . $id;


// 发送查询
if(mysql_query($sql,$conn)) {
echo '删除成功';
} else {
echo '删除失败';
}

 

// 地址栏来一个 id=83 or 1
/*
根据$sql拼接的结果
$sql = 'delete from stu where id=83 or 1'

1恒为真,因为所有的行,都满足条件,都被删了.
这是一个非常简单的sql注入的例子.


怎么避免?
答:大原则,永远不要信任从客户处传来的数据
见04.php
*/

/**
燕十八 公益PHP培训
课堂地址:YY频道88354001
学习社区:www.zixue.it
**/

 

// 安全的删除学生

// 连接服务器

$conn = mysql_connect('localhost','root','111111');
if(!$conn) {
echo '连接失败';
exit;
}


// 选库
$sql = 'use test';
// 发送sql,进行查询
$rs = mysql_query($sql,$conn); // 沿着conn通道进行查询


// 设置字符集
$sql = 'set names utf8';
mysql_query($sql,$conn);

// 接收地址栏的id,传几号id,就删几号会员

// 如果是合法的id,应该是整型值才对,不应该是字符串
$id = isset($_GET['id'])?$_GET['id']+0:0;

// 字符串+0,变成整型了,不会再有注入的功能了.

// 形成删除用的sql语句
$sql = 'delete from stu where id=' . $id;


// 发送查询
if(mysql_query($sql,$conn)) {
echo '删除成功';
} else {
echo '删除失败';
}

 

/*

今天我们的学习内容:
1:安装mysql
2:连接mysql
3:mysql的最基本操作:连接服务器/查看库/选库/查看表/增删改查数据
4:php连接mysql服务器
5:发送sql查询


完成一个添加用户,和删除用户
*/

 


/*
展望项目:
所谓网站,无论外形千变万化,从PHPer的角度看,
无非是数据库增删改查


发布新闻/用户注册/发帖子 --->insert
删除新闻/删除微博/删帖 --->delete
编辑文章/修改文章 --->update
查看文章/查看信件 --->select

*/

 

 

 

posted on 2012-10-13 11:15  besile  阅读(191)  评论(0)    收藏  举报