zoukankan      html  css  js  c++  java
  • PHP-数据库抽象层(PDO)

    <?php
    
    $dsn="mysql:dbname=mydb;host=localhost";//DSN的格式:1.驱动名 2.数据库名 3.服务器地址
    $pdo= new PDO($dsn,"root","");//造PDO对象
    $sql="select * from Info";
    //$attr=$pdo->query($sql);
    //var_dump($attr);
    
    $a=$pdo->prepare($sql);//预处理语句
    
    if($a->execute())//执行语句,成功返回TRUE,失败返回false
    {
        $a->fetch(); //取一行数据,返回一个数组(关联数组和索引数组并存)
        $a->fetchAll();//取所有数据,返回二维数组
        $a->fetchColumn();//取一列数据
        $a->fetchObject();//取一行数据,返回一个对象
    }
    else
    {
        echo "执行失败";
    }
    ?>

    预处理过程:
    很多更成熟的数据库都支持预处理语句的概念。什么是预处理语句?您可以把预处理语句看作您想要运行的 SQL 的一种编译过的模板,它可以使用变量参数进行定制。预处理语句可以带来两大好处:
    查询只需解析(或准备)一次,但是可以用相同或不同的参数执行多次。当查询准备好后,数据库将分析、编译和优化执行该查询的计划。对于复杂的查询,这个过程要花比较长的时间,如果您需要以不同参数多次重复相同的查询,那么该过程将大大降低应用程序的速度。通过使用预处理语句,可以避免重复分析/编译/优化周期。简言之,预处理语句使用更少的资源,因而运行得更快。 提供给预处理语句的参数不需要用引号括起来,驱动程序会处理这些。如果应用程序独占地使用预处理语句,那么可以确保没有 SQL 入侵发生。(然而,如果您仍然将查询的其他部分建立在不受信任的输入之上,那么就仍然存在风险)。 预处理语句是如此有用,以致 PDO 实际上打破了在目标 4 中设下的规则:如果驱动程序不支持预处理语句,那么 PDO 将仿真预处理语句。

    PDO中的查询操作:execute/query/prepared statement
    在PDO中有三种方法执行查询操作,分别是用execute、query和使用prepared statement。三种方法各有利弊,先说execute。
    (1)PDO::execute()一般用于执行一次的SQL语句,返回受查询影响的行数。它不适用于SELECT语句,如果需要用一次是SELECT语句,可以用PDO::query();也不适用于多次使用的语句,如果有多次使用的需求,考虑用PDO::prepare()。
    (2)PDO::query()用于执行一次SELECT语句,执行后应当随即使用PDOStatement::fetch()语句将结果取出,否则立即进行下一次的PDO::query()将会报错。
    (3)PDOStatement表示一个prepared statement语句,而在执行之后,又将返回一组关联数组的结果。如果一类查询(查询结构相似而具体的参数不一)需要一次解析而执行使用很多次,可以先用prepared statement,这样可以为具体的查询的执行做好准备,避免了分析、编译、优化的循环,将减少资源占用率,从而提高运行效率。通过对数据库进行prepare操作,便会返回PDOStatement数据类型,从而在其基础上展开execute、fetch等进一步的操作。
  • 相关阅读:
    STDMETHOD (转)
    DirectX中的纹理映射相关技术 (转)
    (转)清空std::stringstream,联系到stream的clear()和清空
    (转载)MultiAnimation
    (转)SkyBox
    [转载]漫谈游戏中的阴影技术
    反射矩阵计算
    (转)COM组件里的AddRef()
    LINQ简记(2):重要概念
    继续聊WPF——自定义命令
  • 原文地址:https://www.cnblogs.com/Itwonderful/p/5488809.html
Copyright © 2011-2022 走看看