php 操作mysql相关杂货

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值