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

From: 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

« previous php.bugs (#210026) next »