From: [EMAIL PROTECTED]
Operating system:
PHP version: 4.0.6
PHP Bug Type: Unknown/Other Function
Bug description: PEAR/DB : DB_common::executeEmulateQuery() bug
Multiple execution emulation fails as in the following script:
<?php
$db = DB::connect("mysql://localhost/test");
$some_query_with_params = "DELETE FROM TST WHERE id = ? ";
$params = array(1,2,3);
$stmt = $db->prepare($some_query_with_params);
foreach($params as $param)
$db->execute($stmt, array($param)); //Fails !!!
?>
The reason for that is executeEmulateQuery() code:
function executeEmulateQuery($stmt, $data = false)
{
$p = &$this->prepare_tokens;
$stmt = (int)$this->prepare_maxstmt++; // BUG ?
if (!isset($this->prepare_tokens[$stmt]) ||
!is_array($this->prepare_tokens[$stmt]) ||
!sizeof($this->prepare_tokens[$stmt])) {
return $this->raiseError(DB_ERROR_INVALID);
}
$qq = &$this->prepare_tokens[$stmt];
// and so on...
What does the second line do?:
$stmt = (int)$this->prepare_maxstmt++;
It ignores the input parameter $stmt, sets it to some unreasonable value,
and we always get DB_ERROR_INVALID. If the line is removed - everything
works. Apparently this line should not be here at all.
--
Edit bug report at: http://bugs.php.net/?id=12137&edit=1
--
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]