Advertisement
Guest User

pdo_commit_bug

a guest
Jan 31st, 2014
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.92 KB | None | 0 0
  1. <? # PDO::commit() bug(?) -- cottton @i-stats.net
  2. $user = 'set_uname';
  3. $pw = 'set_pw';
  4. $db = 'set_ db';
  5.  
  6. # 1. connect and use db
  7. #
  8. try{
  9.     $dbh = new PDO('mysql:host=localhost',$user,$pw);
  10. }catch(PDOException $e){
  11.     echo $e->getMessage();
  12. }
  13. $sql = "USE ".str_replace("'",'`',$dbh->quote($db));
  14. $stmt = $dbh->prepare($sql);
  15. if(!$stmt->execute()){
  16.     $err_info = $stmt->errorInfo();
  17.     exit(
  18.         '(SQLSTATE: '.$err_info[0].') '.((empty($err_info[2]))?error_get_last_str():$err_info[2]).
  19.         '<br>Query: '.$sql
  20.     );
  21. }
  22.  
  23.  
  24. # 2. create tbl if not exists
  25. #
  26. $sql = "
  27.     CREATE TABLE IF NOT EXISTS `testtable`
  28.     (
  29.         `id` INT unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
  30.         `name` VARCHAR(16) NOT NULL
  31.     );
  32. ";
  33. $stmt = $dbh->prepare($sql);
  34. if(!$stmt->execute()){
  35.     $err_info = $stmt->errorInfo();
  36.     exit(
  37.         '(SQLSTATE: '.$err_info[0].') '.((empty($err_info[2]))?error_get_last_str():$err_info[2]).
  38.         '<br>Query: '.$sql
  39.     );
  40. }
  41.  
  42.  
  43. # 3. multi insert via beginTransaction() and commit() / rollBack()
  44. #
  45. $dbh->beginTransaction();
  46. $sql = "
  47.     INSERT INTO testtable SET name = :name1;
  48.     INSERT INTO testtable SET name = :name2;
  49.     INSERT INTO testtable SET name = :name3;
  50. ";
  51. $para = array(
  52.     'name1' => 'hans',
  53.     'name2' => 'klaus',
  54.     'name3' => 'olaf'
  55. );
  56. $stmt = $dbh->prepare($sql);
  57. if(!$stmt->execute($para)){
  58.     $dbh->rollBack();
  59.     $err_info = $stmt->errorInfo();
  60.     exit(
  61.         '(SQLSTATE: '.$err_info[0].') '.((empty($err_info[2]))?error_get_last_str():$err_info[2]).
  62.         '<br>Query: '.$sql
  63.     );
  64. }else{
  65.     if(1){
  66.         echo '<h1>bug(?) "version":</h1>';
  67.         /*DEBUG*/ test($stmt,'$stmt before $dbh->commit()');
  68.         /*DEBUG*/ test($dbh->commit(),'fire $dbh->commit()');
  69.         /*DEBUG*/ test($stmt,'$stmt after $dbh->commit()');
  70.     }else{
  71.         echo '<h1>working "version":</h1>';
  72.         /*DEBUG*/ test($stmt,'$stmt before $dbh->commit()');
  73.         /*DEBUG*/ test($stmt = 'string','$stmt = \'string\'');
  74.         /*DEBUG*/ test($dbh->commit(),'fire $dbh->commit()');
  75.         /*DEBUG*/ test($stmt,'$stmt after $dbh->commit()');
  76.     }
  77. }
  78.  
  79.  
  80. ## 4. read tbl
  81. #
  82. $sql = "SELECT * FROM `testtable`;";
  83. $stmt = $dbh->prepare($sql);
  84. if(!$stmt->execute()){
  85.     $err_info = $stmt->errorInfo();
  86.     exit(
  87.         '(SQLSTATE: '.$err_info[0].') '.((empty($err_info[2]))?error_get_last_str():$err_info[2]).
  88.         '<br>Query: '.$sql
  89.     );
  90. }else{
  91.     while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
  92.         $result[] = $row;
  93.     }
  94.     /*DEBUG*/ test($result,'SELECT * FROM `testtable`;');
  95. }
  96.  
  97.  
  98.  
  99. function test($val,$title='') # just a dubug func ... life easier ...
  100. {
  101.     $br = '<br />';
  102.     echo '<pre># <b>DEBUG</b>: <u>'.$title.'</u>'.$br;
  103.     echo '<i>type:</i> '.gettype($val).$br.'<i>val:</i> ';
  104.     if(is_bool($val)){
  105.         echo ($val === true)?'true':'false';
  106.     }elseif(is_null($val)){
  107.         echo 'NULL';
  108.     }elseif(!is_numeric($val)and empty($val)){
  109.         echo 'empty';
  110.     }elseif(is_resource($val)){
  111.         echo get_resource_type($val);
  112.     }else{
  113.         print_r($val);
  114.     }
  115.     echo $br.'#/DEBUG</pre>';
  116. }
  117. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement