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

From: Date: Wed, 12 Jul 2017 16:33:38 +0000
Subject: Bug #74912 [Com]: PDO errorInfo 1062 Duplicate entry
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-210027@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:

Ah, damn. Nevermind, I missed the error code :(


Previous Comments:
------------------------------------------------------------------------
[2017-07-12 16:30:14] martins dot teresko at gmail dot com

From the fine manual: 


"If you do not specify a list of column names for INSERT ... VALUES or INSERT ... SELECT,
values for every column in the table must be provided by the VALUES list or the SELECT statement. If
you do not know the order of the columns in the table, use DESCRIBE tbl_name to find out."

https://dev.mysql.com/doc/refman/5.7/en/insert.html

------------------------------------------------------------------------
[2017-07-12 16:22:45] marc dot w dot hagen at gmail dot com

Re: martins dot teresko at gmail dot com
Well more information is needed than that. As i see it this has nothing to do with SQL... This was a
MySQL database.

------------------------------------------------------------------------
[2017-07-12 16:11:11] martins dot teresko at gmail dot com

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

------------------------------------------------------------------------
[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 (#210027) next »