您的位置:首页 > 编程语言 > PHP开发

php 操作mysql相关杂货

2016-06-19 07:31 399 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: