• 学习笔记:mysqli预处理和事务处理


     

    1

    应用环境

     

     

     

    mysqli预处理功能(大量数据处理时使用)

    2

    步骤

     

     

    a)mysqli连接数据库

    $mysqli = new mysqli('localhost','root','root','chuanzhi');

     

    b)设置编码

    $mysqli->set_charset('gb2312');

     

    c)发送query语句

    使用$mysqli->prepare($query)这个方法表示是预处理,如果涉及到取值,必须指定查询字段

    $query = "select id,proName,proClass,proPrice from product where id>?";

    $stmt = $mysqli->prepare($query);

     

    d)提供条件

    比如上句用了?作为不确定的值,就需要指定

    $stmt->bind_param('i', $id);        用变量绑定?表示的值,i表示整型,d表示浮点型,b代表二进制,s代表其它的所有

    $id='1';                                指定变量的值

    $stmt->execute();                发送变量,此时服务器的语句已经完整了

     

    e)从sql服务器中取回结果

    预处理语句会将结果集保存在sql开辟的内存中,php开辟的内存无法直接使用(count是php函数,不是sql函数,无法直接与sql内存交互),默认情况是每次执行fetch()会从sql内存中取出一行,但是不使用store_result()就无法获取行数.当然如果你的结果只有一行,可以无视这一句.请记住:在mysqli预处理中取出数据,只能使用fetch()这是因为mysqli_stmt类并没有其它取值方法

    $stmt->store_result();//如果用变量接收的话,会发现成功了显示1,否则显示0

     

    f)获取结果集行数

    $count = $stmt->num_rows();

     

    g)绑定结果集需要输出的字段

    $stmt->bind_result($id,$proName,$proClass,$proPrice);        名字无所谓,反正按顺序对应query的字段,变量个数要和query字段个数一致

     

    h)输出结果

    前面说了,既然要取值,当然前面query指定了查询字段,上句的变量用上了

     

    i)

    你懂的,关闭mysqli链接

     

    事务处理

    1

    应用环境

     

     

     

    对于安全比较在意的时候使用

    2

    步骤

     

     

     

    MYSQL中只有INNODB和BDB类型的数据表才能支持事务处理!其他的类型是不支持的!

     

    a)连接数据库和设置编码

    不用说,当然是连接数据库和设置编码了,mysql和mysqli都支持事务处理

     

    b)关闭自动提交

    $mysqli->autocommit(false);在sql的客户端里面用set autocommit = 0;

     

    c)开启事务

    开启一个事务start transation(mysql中才有这一句,mysqli不需要这一句);

     

    d)执行sql语句

     

     

    e)判断执行结果是否是自己想要的

    如果是,就提交$mysqli->commit();

    否则,回滚$mysqli->rollback();

     

    f)开启自动提交

    $mysqli->autocommit(true);        //个人认为这句并不是必须的,因为页面执行完,会回到初始状态,也就是自动提交状态

     

    g)关闭数据库连接

    $mysqli->close();

     

     

     

    原创作品,请勿转载,如确需转载请保持文章完整并注明出处,谢谢合作。

    (许坤,php工程师,PHP工程师,互联网研发工程师,软件工程师)

    原文地址:http://www.cnblogs.com/quinnxu/archive/2012/07/18/2597306.html

  • 相关阅读:
    codeforces 686A A. Free Ice Cream(水题)
    bzoj-1192 [HNOI2006]鬼谷子的钱袋(水题)
    poj-3254 Corn Fields(状压dp)
    poj-1185 炮兵阵地(状压dp)
    Notepad++ 小技巧
    使用 notepad++ 编辑器在行首、行尾添加字符
    查看数据库中有大写的表
    Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT) for operation '='
    expect
    shell数组
  • 原文地址:https://www.cnblogs.com/quinnxu/p/2597306.html
Copyright © 2020-2023  润新知