Bug #74912 [Com]: PDO errorInfo 1062 Duplicate entry
| From: | martins dot teresko at gmail dot com | Date: | Wed, 12 Jul 2017 16:30:16 +0000 |
| Subject: | Bug #74912 [Com]: PDO errorInfo 1062 Duplicate entry | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-210026@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:
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
Previous Comments:
------------------------------------------------------------------------
[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