|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2005-10-25 11:28 UTC] lists at cyberlot dot net
Description:
------------
When not calling closeCursor after a single line select the next statement fails without error because cursor is not closed.
Reproduce code:
---------------
The following code does not insert anything, returns 00000 for the errorCode
<?php
$db = new PDO("mysql:dbname=chatbeta;host=localhost", "chatbeta", "chatbeta");
if(!$db) {
die("DB Connection Failed");
}
$logstmt = $db->prepare('INSERT INTO logger (login, data) VALUES (:var1, :var2)');
$authstmt = $db->prepare('SELECT * FROM users WHERE login = :varlog AND password = :varpass');
$authstmt->execute(array(':varlog' => 'testing', ':varpass' => 'testing'));
print_r($authstmt->fetch());
$logstmt->execute(array(':var1' => 'test1', ':var2' => 'test2'));
print_r($db->errorCode());
?>
The following code works, same thing 00000 returned for errorcode. Only diffrence closeCursor added.
<?php
$db = new PDO("mysql:dbname=chatbeta;host=localhost", "chatbeta", "chatbeta");
if(!$db) {
die("DB Connection Failed");
}
$logstmt = $db->prepare('INSERT INTO logger (login, data) VALUES (:var1, :var2)');
$authstmt = $db->prepare('SELECT * FROM users WHERE login = :varlog AND password = :varpass');
$authstmt->execute(array(':varlog' => 'testing', ':varpass' => 'testing'));
print_r($authstmt->fetch());
$authstmt->closeCursor();
$logstmt->execute(array(':var1' => 'test1', ':var2' => 'test2'));
print_r($db->errorCode());
?>
There is only a single line in the users table, so only one row is returned. If I change the fetch to fetchAll it works without the closeCursor.
Expected result:
----------------
Expect an error when the insert fails due to a unclosed cursor.
Actual result:
--------------
No insert of data into the database, no error
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Mon Oct 27 02:00:01 2025 UTC |
Ok, downloaded php-5.1.0rc3 from the qa site. Here is my code <? $db = new PDO("mysql:dbname=test;host=localhost", "test", "test"); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); if(!$db) { die("DB Connection Failed"); } $logstmt = $db->prepare('INSERT INTO logger (login, data) VALUES (:var1, :var2)'); $authstmt = $db->prepare('SELECT * FROM users WHERE login = :varlog AND password = :varpass'); $authstmt->execute(array(':varlog' => 'testing', ':varpass' => 'testing')); print_r($authstmt->fetch()); $logstmt->execute(array(':var1' => 'test1', ':var2' => 'test2')); print_r($logstmt->errorCode()); ?> Error code 00000 insert did not happen.