6-12 新的笔记
<h1>mysql扩展的基本使用</h1>
<h2>dql操作</h2>
细节 :
1. 所有的表名都用 反引号 `` 包起来
2. mysql_fetch_array : 返回两套数组 : 关联数组,索引数组 , 代价高昂
mysql_fetch_row : 返回索引数组
mysql_fetch_object : 返回对象 , 用对象运算符取值
mysql_fetch_assoc : 返回关联数组 ,用的最多
3. 关于结果集的释放原则 , 尽量及时释放 , 如果不释放 , 系统也会在 php 脚本执行完毕后将其释放 , 但是会有延时
连接的关闭 : 一般来说让系统自己关闭 原因是在 php 页面中还有可能继续操作 mysql
<h2>dml操作</h2>
细节 :
1. mysql_affected_rows() 可以查看dml操作受影响的行数
2. dml 不需要释放资源(本身并不返回资源)
<h2>mysql_query</h2>
mysql_query()可以发送drop ,create ,alter等 任意sql语句,
配合mysql_error , 可以实现不登录 mysql 控制台对 mysql 进行操作
<h1>mysqli扩展的基本使用</h1>
最大的特点 : 支持面向对象
细节 :
1. 同时支持面向对象 与 面向过程
2. 四种方法取出记录, 常用 $res -> fetch_assoc
6-14
mysqli 事务控制 :
$mysqli ->begin_transaction();
$mysqli -> commit();
<h1>$mysqli 批量执行sql语句 :</h1>
<h2>批量执行dml语句 :</h2>
$sqls = '$sql1 ; $sql2 ; $sql3';
或者 $sqls = 'sql1;';
$sqls .= 'sql2;';
$sqls .= 'sql3';
$mysqli -> multi_query($sqls);
注意 :
1. multi_query() dml语句, 返回的是第一条sql语句执行的结果
2. 如果有一个出错 , 会从出错的语句位置 , 停止执行
3. dml语句可以混用 , insert , update 等 ,但是不要和dql混用
<h2>批量执行dql语句</h2>
用法同dml
取结果 :
do{
//依次取结果 ,store_result()方法每次只会取出一个结果集(一条sql语句的结果集)
$res = $mysqli -> store_result();
while($row = $res -> fetch_assoc()) {
$rows[] = $row;
}
$res -> free();
//more_result() 检测后面是否有更多的结果集
if(!$mysqli -> more_result()) {
break;
}
//移动到下一条结果集
}while($mysqli -> next_resutl());
<h1>mysqli_stmt 预处理</h1>
简化 dbms 处理 sql 语句的过程
1. 效率高 , 执行速度快
2. 安全性高 , 可以防止 sql 注入
<h2>预处理技术插入数据</h2>
//准备sql语句, ? 表示占位符 , 会用变量绑定
$sql = 'insert into 表 values(?,?,?)';
//得到预处理对象
$stmt = $mysqli -> prepare($sql);
//准备添加的数据
$id = 1;
$name = '大狗';
$salary =133.32;
//绑定数据 ,'isd' 表示后面参数的类型
$stmt -> bind_param('isd' , $id , $name , $salary);
//执行
if($stmt -> execute()) {
echo '预处理执行成功';
}else {
echo '预处理执行失败' . $stmt -> error;
}
//第二条数据
$id = 2;
$name = '小狗';
$salary = 12.21;
//第二条数据直接执行
//执行
if($stmt -> execute()) {
echo '预处理执行成功';
}else {
echo '预处理执行失败' . $stmt -> error;
}
//关闭
$stmt -> close();
$mysqli -> close();
<h2>预处理 select 操作</h2>
$sql = 'select id , name , email from 表 where id > ?';
$stmt = $mysqli -> prepare($sql);
$id = 5;
$stmt -> bind_param('i',$id);
//绑定结果集
$stmt -> bind_result($id , $name , $salary);
//执行
id($stmt -> execute()) {
echo '预处理查询成功';
//取出结果集
while($stmt -> fetch()) {
echo $id,$name $salary;
echo '<br>';
}
}else {
echo '预处理查询失败' . $stmt -> error;
}
$stmt -> free_result();
$stmt -> close();
$mysqli -> close();
<h2>预处理 防止 sql 注入</h2>
$sql= "select * from 表 where id =? and pwd = ?";
$stmt = $mysqli -> prepare($sql);
$id =100,
$pwd = "'abc' or 1='1'";
$stmt -> bind_param('is', $id ,$pwd);
$stmt -> bind_result($id ,$name ,$pwd);
if($stmt -> execute()) {
while ($stmt -> fetch()) {
echo $id,$name ,$pwd;
}
}else {
echo '错误' . $stmt->error;
}
注意 :
1. 从数据库校验账号时 , 通过id 查询对应的密码
a. id 不存在 , 退出
b. id存在 , 把取出的密码 和 用户输入的密码进行比对
2. 转义单引号等危险字符 mysql_real_escape_string
<h1>mysql扩展的基本使用</h1>
<h2>dql操作</h2>
细节 :
1. 所有的表名都用 反引号 `` 包起来
2. mysql_fetch_array : 返回两套数组 : 关联数组,索引数组 , 代价高昂
mysql_fetch_row : 返回索引数组
mysql_fetch_object : 返回对象 , 用对象运算符取值
mysql_fetch_assoc : 返回关联数组 ,用的最多
3. 关于结果集的释放原则 , 尽量及时释放 , 如果不释放 , 系统也会在 php 脚本执行完毕后将其释放 , 但是会有延时
连接的关闭 : 一般来说让系统自己关闭 原因是在 php 页面中还有可能继续操作 mysql
<h2>dml操作</h2>
细节 :
1. mysql_affected_rows() 可以查看dml操作受影响的行数
2. dml 不需要释放资源(本身并不返回资源)
<h2>mysql_query</h2>
mysql_query()可以发送drop ,create ,alter等 任意sql语句,
配合mysql_error , 可以实现不登录 mysql 控制台对 mysql 进行操作
<h1>mysqli扩展的基本使用</h1>
最大的特点 : 支持面向对象
细节 :
1. 同时支持面向对象 与 面向过程
2. 四种方法取出记录, 常用 $res -> fetch_assoc
6-14
mysqli 事务控制 :
$mysqli ->begin_transaction();
$mysqli -> commit();
<h1>$mysqli 批量执行sql语句 :</h1>
<h2>批量执行dml语句 :</h2>
$sqls = '$sql1 ; $sql2 ; $sql3';
或者 $sqls = 'sql1;';
$sqls .= 'sql2;';
$sqls .= 'sql3';
$mysqli -> multi_query($sqls);
注意 :
1. multi_query() dml语句, 返回的是第一条sql语句执行的结果
2. 如果有一个出错 , 会从出错的语句位置 , 停止执行
3. dml语句可以混用 , insert , update 等 ,但是不要和dql混用
<h2>批量执行dql语句</h2>
用法同dml
取结果 :
do{
//依次取结果 ,store_result()方法每次只会取出一个结果集(一条sql语句的结果集)
$res = $mysqli -> store_result();
while($row = $res -> fetch_assoc()) {
$rows[] = $row;
}
$res -> free();
//more_result() 检测后面是否有更多的结果集
if(!$mysqli -> more_result()) {
break;
}
//移动到下一条结果集
}while($mysqli -> next_resutl());
<h1>mysqli_stmt 预处理</h1>
简化 dbms 处理 sql 语句的过程
1. 效率高 , 执行速度快
2. 安全性高 , 可以防止 sql 注入
<h2>预处理技术插入数据</h2>
//准备sql语句, ? 表示占位符 , 会用变量绑定
$sql = 'insert into 表 values(?,?,?)';
//得到预处理对象
$stmt = $mysqli -> prepare($sql);
//准备添加的数据
$id = 1;
$name = '大狗';
$salary =133.32;
//绑定数据 ,'isd' 表示后面参数的类型
$stmt -> bind_param('isd' , $id , $name , $salary);
//执行
if($stmt -> execute()) {
echo '预处理执行成功';
}else {
echo '预处理执行失败' . $stmt -> error;
}
//第二条数据
$id = 2;
$name = '小狗';
$salary = 12.21;
//第二条数据直接执行
//执行
if($stmt -> execute()) {
echo '预处理执行成功';
}else {
echo '预处理执行失败' . $stmt -> error;
}
//关闭
$stmt -> close();
$mysqli -> close();
<h2>预处理 select 操作</h2>
$sql = 'select id , name , email from 表 where id > ?';
$stmt = $mysqli -> prepare($sql);
$id = 5;
$stmt -> bind_param('i',$id);
//绑定结果集
$stmt -> bind_result($id , $name , $salary);
//执行
id($stmt -> execute()) {
echo '预处理查询成功';
//取出结果集
while($stmt -> fetch()) {
echo $id,$name $salary;
echo '<br>';
}
}else {
echo '预处理查询失败' . $stmt -> error;
}
$stmt -> free_result();
$stmt -> close();
$mysqli -> close();
<h2>预处理 防止 sql 注入</h2>
$sql= "select * from 表 where id =? and pwd = ?";
$stmt = $mysqli -> prepare($sql);
$id =100,
$pwd = "'abc' or 1='1'";
$stmt -> bind_param('is', $id ,$pwd);
$stmt -> bind_result($id ,$name ,$pwd);
if($stmt -> execute()) {
while ($stmt -> fetch()) {
echo $id,$name ,$pwd;
}
}else {
echo '错误' . $stmt->error;
}
注意 :
1. 从数据库校验账号时 , 通过id 查询对应的密码
a. id 不存在 , 退出
b. id存在 , 把取出的密码 和 用户输入的密码进行比对
2. 转义单引号等危险字符 mysql_real_escape_string