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

From: Date: Wed, 12 Jul 2017 16:22:46 +0000
Subject: Bug #74912 [Com]: PDO errorInfo 1062 Duplicate entry
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-210025@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: marc dot w dot hagen 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: 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. Previous Comments: ------------------------------------------------------------------------ [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

« previous php.bugs (#210025) next »