Bug #74912 [Com]: PDO errorInfo 1062 Duplicate entry

From: Date: Wed, 12 Jul 2017 16:11:11 +0000
Subject: Bug #74912 [Com]: PDO errorInfo 1062 Duplicate entry
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-210023@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=74912&edit=1

 ID:                 74912
 Comment by:         martins dot teresko at gmail dot com
 Reported by:        marc dot w dot hagen at gmail dot com
 Summary:            PDO errorInfo 1062 Duplicate entry
 Status:             Open
 Type:               Bug
 Package:            PDO related
 Operating System:   Debian 3.2.86-1 x86_64
 PHP Version:        5.6.31
 Block user comment: N
 Private report:     N

 New Comment:

It's not a bug. You need to learn SQL.


Previous Comments:
------------------------------------------------------------------------
[2017-07-12 16:02:38] marc dot w dot hagen at gmail dot com

Description:
------------
PDOStatement->errorInfo() will have driver errors even if there is a new query that has been
executed.
If, for example, there is a duplicated query on the first statement it will return   false and
populates the errorInfo.
But the next query that succeeds still has the errorInfo, only array key 1 and 2, from the previous
query.
This should be cleared.

Test script:
---------------
<?php
$db = new
PDO("mysql:host=".$dboptions['host'].";port=".$dboptions['port'].";dbname=".$dboptions['dbname'],
$dboptions['username'], $dboptions['password']);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
$data = [ [ 'php', 'rulez' ], [ 'php', 'rulez' ], [
'php', 'rule' ] ];
$stmt = $db->prepare('INSERT INTO testTable VALUES (?, ?)');
$stmt->bindParam(1, $lang, PDO::PARAM_STR);
$stmt->bindParam(2, $action, PDO::PARAM_STR);
foreach($data as $set) {
    $lang = $set[0];
    $action = $set[1];
    $stmt->execute();
    var_dump($stmt->errorInfo());
}
$db = null;

Expected result:
----------------
array(3) {
  [0]=>
  string(5) "00000"
  [1]=>
  NULL
  [2]=>
  NULL
}
array(3) {
  [0]=>
  string(5) "23000"
  [1]=>
  int(1062)
  [2]=>
  string(45) "Duplicate entry 'php-rulez' for key 'PRIMARY'"
}
array(3) {
  [0]=>
  string(5) "00000"
  [1]=>
  NULL
  [2]=>
  NULL
}

Actual result:
--------------
array(3) {
  [0]=>
  string(5) "00000"
  [1]=>
  NULL
  [2]=>
  NULL
}
array(3) {
  [0]=>
  string(5) "23000"
  [1]=>
  int(1062)
  [2]=>
  string(45) "Duplicate entry 'php-rulez' for key 'PRIMARY'"
}
array(3) {
  [0]=>
  string(5) "00000"
  [1]=>
  int(1062)
  [2]=>
  string(45) "Duplicate entry 'php-rulez' for key 'PRIMARY'"
}


------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=74912&edit=1


Thread (14 messages)

« previous php.bugs (#210023) next »