zoukankan      html  css  js  c++  java
  • PHP_数据库_PDO查询操作和预编译语句操作。

    PDO使用dns进行连接,我采用new ClassName()方式(其实大同小异,形式罢了)。

    尝试先插入,然后查询,在查询遍历每一条的时候插入。
    结果很简单,第一次插入能插入,但是在遍历结束之前是不能插入的。

     1 <?php
     2 $dsn = 'mysql:dbname=stuphp;host=127.0.0.1';
     3 $user = 'root';
     4 $password = 'admin';
     5 
     6 try {
     7     $dbh = new PDO ( $dsn, $user, $password );
     8 } catch ( PDOException $e ) {
     9     echo 'Connection failed: ' . $e->getMessage ();
    10 }
    11 $dbh->query ( 'set names utf8' ); // 是我的mysql数据库也是utf8编码的 。但是就是不行。必须这么写才行。
    12 
    13 //插入一条记录
    14 $username = 'leaves';
    15 $password = 's&^*&B324';
    16 $mark = '我是好人';
    17 $pstmt = $dbh->prepare ( 'INSERT INTO TUSER(USERNAME,PASSWORD,MARK) VALUES(:username,:password,:mark)' );
    18 $pstmt->bindParam ( ':username', $username );
    19 $pstmt->bindParam ( ':password', $password );
    20 $pstmt->bindParam ( ':mark', $mark );
    21 $pstmt->execute ();
    22 print_r ( $pstmt->errorInfo () );
    23 
    24 $sql = 'SELECT USERNAME,PASSWORD,MARK FROM TUSER';
    25 $result = $dbh->query ( $sql );
    26 
    27 $row = $result->fetchObject ();
    28 $dbh->beginTransaction();
    29 while ( $row ) {
    30     $username = $row->USERNAME;
    31     $password = $row->PASSWORD;
    32     $mark = $row->MARK;
    33     
    34     echo $username . "\t";
    35     echo $password . "\t";
    36     echo $mark . "<br/>";
    37     
    38     
    39     //------------------中途尝试插入
    40     $pstmt = $dbh->prepare ( 'INSERT INTO TU22SER(USERNAME,PASSWORD,MARK) VALUES(:username,:password,:mark)' );
    41     $pstmt->bindParam ( ':username', $username );
    42     $pstmt->bindParam ( ':password', $password );
    43     $pstmt->bindParam ( ':mark', $mark );
    44     $pstmt->execute ();
    45     print_r ( $pstmt->errorInfo () );
    46     //上面的查询不会成功。原因是在查询没有结束的时候不允许你继续插入,就好像别人在存钱,你在取钱一样。
    47     //下面是异常信息
    48     /*
    49      * Array ( [0] => HY000 [1] => 2014 [2] => Cannot execute queries while
    50      * other unbuffered queries are active. Consider using
    51      * PDOStatement::fetchAll(). Alternatively, if your code is only ever going
    52      * to run against mysql, you may enable query buffering by setting the
    53      * PDO_MYSQL_ATTR_USE_BUFFERED_QUERY attribute. )
    54      */
    55     
    56     $row = $result->fetchObject ();
    57 }
    58 
    59 
    60 //插入一条记录,下面的代码能执行,无错
    61 // $username = 'leaves';
    62 // $password = 's&^*&B324';
    63 // $mark = '我是好人';
    64 // $pstmt = $dbh->prepare ( 'INSERT INTO TUSER(USERNAME,PASSWORD,MARK) VALUES(:username,:password,:mark)' );
    65 // $pstmt->bindParam ( ':username', $username );
    66 // $pstmt->bindParam ( ':password', $password );
    67 // $pstmt->bindParam ( ':mark', $mark );
    68 // $pstmt->execute ();
    69 // print_r ( $pstmt->errorInfo () );
    70 ?>
    天行健君子以自强不息。
  • 相关阅读:
    [LeetCode] 14. Longest Common Prefix 最长共同前缀
    [LeetCode] 16. 3Sum Closest 最近三数之和
    [LeetCode] 15. 3Sum 三数之和
    [LeetCode] 75. Sort Colors 颜色排序
    [LeetCode] 13. Roman to Integer 罗马数字转为整数
    [LeetCode] 12. Integer to Roman 整数转为罗马数字
    [LeetCode] 8. String to Integer (atoi) 字符串转为整数
    [LeetCode] 9. Palindrome Number 验证回文数字
    [LeetCode] 388. Longest Absolute File Path 最长的绝对文件路径
    [LeetCode] 138. Copy List with Random Pointer 拷贝带随机指针的链表
  • 原文地址:https://www.cnblogs.com/mrye/p/pdo.html
Copyright © 2011-2022 走看看