操作mysql(二)

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

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN">
<head>
<title>新建网页</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="description" content="" />
<meta name="keywords" content="" />
<script type="text/javascript">

</script>

<style type="text/css">
</style>
</head>
<body>
<form action="01.php" method="post">
<p>
method是表单数据的传送方法,一般用get,post<br />
action是数据提交到的目标网址
</p>
学生id:<input type="text" name="id" /><br />
新姓名:<input type="text" name="sname" /><br />
新YY:<input type="text" name="yy" /><br />

<input type="submit" value="提交修改" />
</form>
</body>
</html>

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

 


/*
如何来修改4号用户的信息?

流程:
1:建立到mysql的连接
2:选择库
3:写update语句,并发查询

*/


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

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

// 2:选择数据库
$sql = 'use test';
mysql_query($sql,$conn);

/*
// 3:写update语句
$sql = "update stu set sname='stu4' where id = 33";

if(mysql_query($sql,$conn)) {
echo '修改成功';
} else {
echo '修改失败';
}
*/

/*
要接收表单数据
*/

$sname = addslashes($_POST['sname']);
$yy = addslashes($_POST['yy']);
$id = $_POST['id'] + 0;

$sql = "update stu set sname='" . $sname . "' ,yy= '" . $yy . "' where id=" . $id;

echo $sql,'<br />';

if(mysql_query($sql,$conn)) {
echo '修改成功';
} else {
echo '修改失败';
}


/*

之所以能注入,是因为利用表单值,故意传一些sql的语句的关键字,如单引号,#等.
我们转义,则把单引号转成\',这样,\'就和abcd等普通字符一样,构不成对sql语句的威胁
*/

?>

 

<a href="04.php">用户列表</a>

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

 

/**
对于 增删改,即 insert/delete/update语句
用法是一样的,只需要把 sql语句写好
然后mysql_query执行查询就可以


返回值,也简单:只有true/false两种情况

以增来说,要么增成功,要么没增成功
删: 要么删掉了,要么没删掉
改: 要么改成功,要么没改成功

返回值: true/false


而对于select语句, 执行失败了,返回false
而如果执行成功,返回资源型.

select 就像拿吸管扎豆浆
没扎破,失败: false

扎破了,成功: 返回不是豆浆,而是吸豆浆的一个通道---资源

**/


// 连接服务器
echo '<pre>';


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


// 选库
$sql = 'use test';
mysql_query($sql,$conn);

// 查询
/*
$sql = 'select * from stussss';
$rs = mysql_query($sql,$conn);
var_dump($rs); // bool false
*/

$sql = 'select * from stu';
$rs = mysql_query($sql,$conn);
var_dump($rs); // $rs 是 豆浆的吸管


// 接下来应该? 沿着吸管取豆浆

// 怎么取? 有专门的工具函数 mysql_fetch_assoc/row/array/object

print_r(mysql_fetch_assoc($rs));
print_r(mysql_fetch_assoc($rs));
print_r(mysql_fetch_assoc($rs));
print_r(mysql_fetch_assoc($rs));
var_dump(mysql_fetch_assoc($rs));

echo '<hr />';

$sql = 'select * from stu';
$rs = mysql_query($sql,$conn);

while($row = mysql_fetch_assoc($rs)) {
print_r($row);
}

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

 

// 连接服务器
echo '<pre>';


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


// 选库
$sql = 'use test';
mysql_query($sql,$conn);


$sql = 'select * from stu';
$rs = mysql_query($sql,$conn);
var_dump($rs); // $rs 是 豆浆的吸管


// 接下来应该? 沿着吸管取豆浆

// 怎么取? 有专门的工具函数 mysql_fetch_assoc/row/array/object

print_r(mysql_fetch_assoc($rs));
/*
mysql_fetch_assoc取出的是 关联数组
而且:
键-->表的字段名
值-->字段的值
Array
(
[id] => 16
[sname] => acnwhu
[yy] => acnwhu
)
*/

print_r(mysql_fetch_row($rs));
/*
mysql_fetch_row 取出的结果是一个 索引数组
而且:
字符从左到右,索引依次是0,1,2...N
Array
(
[0] => 5
[1] => stu5'
[2] => yy333333
)
*/


print_r(mysql_fetch_array($rs));
/*
mysql_fetch_array 取出的结果 既有数字索引,也有字段索引
是 前2者结果的 并集
Array
(
[0] => 46
[id] => 46
[1] => rxyzqu
[sname] => rxyzqu
[2] => rxyzqu
[yy] => rxyzqu
)
*/

 

print_r($obj = mysql_fetch_object($rs));
/*
mysql_fetch_object 返回的是对象
stdClass Object
(
[id] => 33
[sname] => stu3333
[yy] => yy333333
)
*/
echo $obj->id;

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

 


// 所有的用户列表
$conn = mysql_connect('localhost','root','111111');
if(!$conn) {
echo '连接数据库失败';
exit;
}


// 选库
$sql = 'use test';
mysql_query($sql,$conn);

// 发送查询
$sql = 'select * from stu';
$rs = mysql_query($sql,$conn);


$list = array();
while($row = mysql_fetch_assoc($rs)) {
$list[] = $row;
}

// print_r($list);

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN">
<head>
<title>新建网页</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="description" content="" />
<meta name="keywords" content="" />
<script type="text/javascript">

</script>

<style type="text/css">
</style>
</head>
<body>
<h2>公益一期学员列表</h2>
<pre>
接下来,我们想达到如下 效果:
点击谁,就修改谁.

具体:点击33号用户,则来到一张表单页面,
表单的值 正好是33号用户的信息.

提交后,则修改33号用户

思路:
点击N号时,把N作为参数传过去.
根据参数拼接sql语句,来查询N号用户
查出来的结果,作为表单的默认值.
</pre>
<table border="1">
<tr>
<td>id</td>
<td>姓名</td>
<td>YY</td>
<td>操作</td>
</tr>
<?php
foreach($list as $v) {
echo '<tr>';
echo '<td>',$v['id'],'</td>';
echo '<td>',$v['sname'],'</td>';
echo '<td>',$v['yy'],'</td>';
echo '<td><a href="05.php?id=',$v['id'],'">编辑</a></td>';
echo '</tr>';

}
?>
</table>
</body>
</html>

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

 

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


// 选库
$sql = 'use test';
mysql_query($sql,$conn);

$id = isset($_GET['id']) ? $_GET['id'] + 0 :0;
$sql = 'select * from stu where id=' . $id;
$rs = mysql_query($sql,$conn);

if(!$rs) {
echo '查询失败';
exit;
}

$stu = mysql_fetch_assoc($rs); // 为什么不用while取?

if(empty($stu)) {
echo '没有这个用户';
exit;
}


?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN">
<head>
<title>新建网页</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="description" content="" />
<meta name="keywords" content="" />
<script type="text/javascript">

</script>

<style type="text/css">
</style>
</head>
<body>
<form action="01.php" method="post">
<pre>
接收地址栏的参数
并根据参数拼接sql语句查询
</pre>
学生id:<input type="text" name="id" value="<?php echo $stu['id'];?>" /><br />
新姓名:<input type="text" name="sname" value="<?php echo $stu['sname'];?>" /><br />
新YY:<input type="text" name="yy" value="<?php echo $stu['yy'];?>" /><br />

<input type="submit" value="提交修改" />
</form>
</body>
</html>

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

 

/*
PHP 操作 mysql的其他几个常用函数
*/

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


// 选库
$sql = 'use test';
mysql_query($sql,$conn);

$id = isset($_GET['id']) ? $_GET['id'] + 0 :0;


// 接收id后,我准备删除数据
$sql = 'delete from stu where id=' . $id;

$rs = mysql_query($sql,$conn);

if($rs) {
echo '删掉了一行数据<br />';
} else {
echo '删数据失败<br />';
}


/*
严重注意:
对于增/删/改 来说,返回值 都是true/false2种情况

其中:insert,返回true,数据肯定是插入成功了.

对于update/delete ,即修改/删除来说
返回为真,代表:这个sql的语法没有问题,执行成功了.
是从语法角度/执行角度来说的.

但是,未必这个语句能影响到数据,比如你的条件不对.

就好比说: 通知书童,把昨天的垃圾扔了,书童年去扔,但发现昨天就已扔了.

返回的true ,是指你通知书童,书童也答应你去干活了.
但是:没有垃圾要扔.


所以,要想真正判断有没有删/改数据,得以实际影响的行数为准
那么,在执行delete/update后,如果获取受影响行数?
答:用函数 mysql_affected_rows
*/

/*
mysql_affected_rows : 在执行delete/update后立即调用此函数,
可得到delete/update语句影响的行数.
*/


$cnt = mysql_affected_rows($conn);
if($cnt) {
echo '删掉了',$cnt,'行数据';
} else {
echo '没有数据被删掉';
}

 

// 继承来看,还剩下多少条数据
echo '<br />';


$sql = 'select * from stu';
$rs = mysql_query($sql,$conn);

/**
// 这是笨办法,循环一遍
// 有现在函数可以用
$num = 0;
while(mysql_fetch_assoc($rs)) {
$num++;
}
**/


/*
mysql_num_rows , 返回 select 语句的结果行数
在运行select 之后,立即调用mysql_num_rows 可以得到这次select的行数
*/

$num = mysql_num_rows($rs);
echo '还剩下',$num,'条数据';

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

 

// mysql的调错


/*
同学们 在开发中,因为php和mysql用的不熟悉,
在php操作mysql是,极容易出错.
碰到错误,一定不要怕,要大胆去看报错信息

报错信息就是犯罪现场,是破案的第一手证据.

当mysql_query执行失败时,必有原因
可以用mysql_errno()打印出错误号
和mysql_error() 打印出错误信息
*/

/*
$conn = mysql_connect('localhost','root','1111111');

Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'root'@'localhost' (using password: YES)

这是账号密码不对
*/


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

$db = 'test';
$sql = 'use'.$db;
echo $sql;

mysql_query($sql,$conn);

$sql = 'delete from stu where id=5';
if(mysql_query($sql,$conn)) {
echo '删除成功';
} else { // 查询失败,就把错误信息打出来
echo '删除失败';
echo '原因:',mysql_errno(),'~',mysql_error();
}

 

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

 

// mysql_close 释放资源


/*
mysql 要连接上 才能操作
而mysql的连接数是有限的,
比如,默认安装一般同时只能连15个.

因此,在使用完mysql后,完成数据增/删/改/查后及时的关闭数据库连接资源
*/


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

// 假设这里有一系列数据库操作
// 操作完毕了.


mysql_close($conn);

$i = 0;
while($i<5) { // 我故意让while循环执行5秒
echo $i++;
sleep(1);
}

// mysql_close($conn);

// 考虑,在28行,和20行,哪行放更合适?为什么

 


/*
对于PHP这种脚本语言, 在PHP运行结束后,一切资源会自动释放
有一些人,就干脆不mysql_close来手动释放资源,
对于小网站也没有太大问题.


对于大网站来说,就比较明显了,比如某个业务需要处理1秒,才能处理完
而大网站中,1秒都有可能发生50次新的连接请求.
完释放1秒钟,就50次请求有可能被你影响.
对于大并发的网站,应尽早释放.
比如上例,上while前,while释放,影响是非常大的.
*/

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

 

/*

利用所学的php操作mysql的知识和 函数知识

封装如下函数:

getAll($sql,$conn)
返回: select的结果,二维形式

getRow($sql,$conn)
返回: select 且一行的结果,一维形式


*/

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