操作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 且一行的结果,一维形式
*/
浙公网安备 33010602011771号