美文网首页
第10 章数据库

第10 章数据库

作者: followyounger1 | 来源:发表于2017-08-16 16:32 被阅读41次

    10.1使用DBM数据库
    问题
    数据可以很容易地表示键值对,希望能安全地存储这些数据,可以根据数据键快速地查找。
    解决办法
    使用DBA抽象层访问DBM数据库
    dba_open(DIR.'./dish.db','c','db4')
    第一个参数是文件名
    第二个参数是模式
    r以只读的方式进行
    w以读写方式访问
    c是以可读可执行的方式进行,如果数据库不存在,则创建数据库。
    n如果数据库已经存在,就清空
    第三个参数是处理程序。

    要关闭一个数据库,需要调用dba_close(),
    可以使用dba_firstkey()和dba_nextkey()迭代处理一个dbm文件
    $dbh=dba_open($data_file,'r','db4');
    $k=dba_firstkey($dbh);
    while($k){
    $total_length+=strlen(dba_fetch($k,$dbh));
    $k=dba_nextkey($dbh);
    }

    print 'sssss';
    $dba_close($dbh);

    10.2使用SQLite数据库
    问题
    希望使用一个关系型数据库而不需要运行一个单独的服务器进程。
    解决方案
    可以使用

    10.3链接sql数据库
    问题
    希望访问一个sql数据库来存储或获取信息,如果没有数据库,动态网站将无法提供充分的动态性。
    解决方案
    用适当的连接字符创建一个新的pdo对象
    $mysql=new PDO('mysql:host=db.example.com',$user,$password);
    讨论
    如果一切正常,pdo构造函数会返回一个金对象,可以用来查询数据库,如果存在问题,则跑出一个PDOException异常

    10.4查询sql数据库
    问题
    希望从数据库中获取一些数据
    解决方案
    使用PDO:query想数据库发送sql差啊讯,然后利用一个foreach循环获取每一行结构
    fetchall返回各个行
    fetch返回一行

    10.6修改sql数据库中的数据
    问题
    希望增加、删除、或修改sql数据库中的数据
    解决方案
    使用PDO::exec()发送一个insert,delete,update命令
    $db->exec("insert into family (id,name) values (1,"vito")");
    $db->exec("delete form family where name like 'fredo'");
    $db->exec("update family set is_naive=1 where name like 'key'");

    10.7高效重复执行查询
    问题
    希望多次运行同一个查询,每次换入不同的值
    解决方案
    execute的值被称为绑定参数
    10.8查看查询返回的行数
    问题
    希望知道一个select查询返回多少行,希望知道insert,update,delete查询改变了多少行
    解决方案
    PO::exec()执行了这个语句,exec的返回值就是所修的行数
    rowCount()统计行数
    count

    10.9转义字符

    问题

    需要保证文本或二进制数据对于查询是安全的

    解决方案

    如果需要自行专业,可以使用PDO::quote()方法,极少情况下,我们希望对来自用户输入的SQL通配符进行转义。

    10.10记录调试信息和错误

    问题

    希望访问一些信息来帮助你调试数据库问题。例如 ,一个查询失败时,希望查看数据库返回的错误信息。
    解决方案
    执行一个操作后,如果操作失败,使用PDO::errorcode或或PDOSTATEMENT::errorCode()得到一个错误码。
    相应的errorInfo()方法可以返回错误的更多信息。

    讨论

    errorCode()返回一个5字符错误码。
    根据这个标准,00000表示“无错误”。所以返回00000的errorCode()调用表示成功。
    包含三个参数
    第一个包含5字符的SQLSTATE
    第二个元素是一个特定于数据库后端的错误码
    第三个元素是一个特定于数据库后端的错误消息。

    10.5缓存查询和结果

    问题

    如果结果并没有改变,你不希望重新运行可能开销很大的数据库查询

    解决方案

    可以使用PEAR的Cache_Lite包。利用这个包,缓存任意的数据会变得简单。在这里,可以缓存一个select查询的结果。
    并使用查询文本作为缓存件

    类似Cache_Lite的PHP层解决方案的一个好处是,他们是数据库无关的。不过取决于你使用的数据库,可以利用数据库特定的查询缓存机制。这些缓存与数据库 继承更加紧密,对于数据改变时缓存数据到期的情况,可以用更聪明的方法进行处理。

    相关文章

      网友评论

          本文标题:第10 章数据库

          本文链接:https://www.haomeiwen.com/subject/fazoqxtx.html