PEAR is archived and read-only

This mirror preserves historical PEAR package releases and metadata so existing references remain available.

Home » Database » MDB2 » Bug #9966

Returns an error when using $mdb2->lastInsertId() and not an id.

Details

Submitted2007-01-29 19:53 UTC
Frommacsnoeren at gmail dot com
Assignedquipo
StatusClosed
PackageMDB2
PHP Version4.3.11
OSLinux
Roadmaps(Not assigned)

Comments

[2007-01-29 19:53 UTC] macsnoeren at gmail dot com

Description:
------------
After a insert query I want to get the ID of the the record
which is just added to the database. The table definition is
very simple and got an 'id' collumn which is the primary key
of the table.

When performing the insert query with $mbd2->query($q) I use
the function $mbd2->lastInsertID() to get the ID. However
I only get an PEAR::Error which contains the debug error:

unable to find package 'MDB2_Datatype' file 'MDB2/Datatype.php'

After searhing on the internet and on the MDB2 pear site I
saw that the MDB2_Datatype.php does not exists in the package.
I could not find it eventually. After a lot of searching I
could not determine the problem and that is the reason I
post it to the bug report.

Test script:
---------------
<?php

require_once 'MDB2.php';

$dsn = 'mysql://user:password@localhost/database';

// Used table definition
//
// CREATE TABLE MDB2_TEST
// ( id INT(11) PRIMARY KEY AUTO_INCREMENT,
// naam varchar(60),
// password varchar(60),
// date timestamp
// );

$mdb2 =& MDB2::connect($dsn); // Also tried factory!

if (PEAR::isError($mdb2)) {
die($mdb2->getMessage() . "\n");
}

$query = "INSERT INTO MDB2_TEST ( naam, password ) VALUES ( 'test', 'test' )";

$res =& $mdb2->query($query);

if (PEAR::isError($res)) {
die($res->getMessage() . "\n");
}

$id =& $mdb2->lastInsertID();

if (PEAR::isError($id)) {
print_r($id);
print "ID error\n";
die($id->getMessage() . "\n");
}

print "ID: '$id'\n";

?>

------------------
Result:

Dump of the PEAR::Error which shows that:
unable to find package 'MDB2_Datatype' file 'MDB2/Datatype.php'
ID error
MDB2 Error: not found

Expected result:
----------------
ID: '2'

When the inserted record got ID 2.

Actual result:
--------------
~maurice>./testmdb2.php

mdb2_error Object
(
[error_message_prefix] =>
[mode] => 1
[level] => 1024
[code] => -4
[message] => MDB2 Error: not found
[userinfo] => unable to find package 'MDB2_Datatype' file 'MDB2/Datatype.php'
[backtrace] => Array
(
[0] => Array
(
[file] => /mnt/d2/opt/pear/lib/php/MDB2.php
[line] => 962
[function] => pear_error
[class] => mdb2_error
[type] => ->
[args] => Array
(
[0] => MDB2 Error: not found
[1] => -4
[2] => 1
[3] => 1024
[4] => unable to find package 'MDB2_Datatype' file 'MDB2/Datatype.php'
)

)

[1] => Array
(
[file] => /mnt/d2/opt/pear/lib/php/PEAR.php
[line] => 564
[function] => mdb2_error
[class] => mdb2_error
[type] => ->
[args] => Array
(
[0] => -4
[1] => 1
[2] => 1024
[3] => unable to find package 'MDB2_Datatype' file 'MDB2/Datatype.php'
)

)

[2] => Array
(
[file] => /mnt/d2/opt/pear/lib/php/MDB2.php
[line] => 575
[function] => raiseerror
[class] => pear
[type] => ::
[args] => Array
(
[0] =>
[1] => -4
[2] =>
[3] =>
[4] => unable to find package 'MDB2_Datatype' file 'MDB2/Datatype.php'
[5] => MDB2_Error
[6] => 1
)

)

[3] => Array
(
[file] => /mnt/d2/opt/pear/lib/php/MDB2.php
[line] => 341
[function] => raiseerror
[class] => mdb2
[type] => ::
[args] => Array
(
[0] => -4
[1] =>
[2] =>
[3] => unable to find package 'MDB2_Datatype' file 'MDB2/Datatype.php'
)

)

[4] => Array
(
[file] => /mnt/d2/opt/pear/lib/php/MDB2.php
[line] => 1847
[function] => loadclass
[class] => mdb2
[type] => ::
[args] => Array
(
[0] => MDB2_Datatype
[1] => 0
)

)

[5] => Array
(
[file] => /mnt/d2/opt/pear/lib/php/MDB2.php
[line] => 3393
[function] => loadmodule
[class] => mdb2_driver_mysql
[type] => ->
[args] => Array
(
[0] => Datatype
[1] =>
[2] => 1
)

)

[6] => Array
(
[file] => /mnt/d2/opt/pear/lib/php/MDB2.php
[line] => 2565
[function] => setresulttypes
[class] => mdb2_bufferedresult_mysql
[type] => ->
[args] => Array
(
[0] => integer
)

)

[7] => Array
(
[file] => /mnt/d2/opt/pear/lib/php/MDB2.php
[line] => 2505
[function] => _wrapresult
[class] => mdb2_driver_mysql
[type] => ->
[args] => Array
(
[0] => Resource id #8
[1] => integer
[2] => 1
[3] =>
[4] => 0
[5] => 0
)

)

[8] => Array
(
[file] => /mnt/d2/opt/pear/lib/php/MDB2.php
[line] => 3190
[function] => query
[class] => mdb2_driver_mysql
[type] => ->
[args] => Array
(
[0] => SELECT LAST_INSERT_ID()
[1] => integer
)

)

[9] => Array
(
[file] => /mnt/d2/opt/pear/lib/php/MDB2/Driver/mysql.php
[line] => 1034
[function] => queryone
[class] => mdb2_driver_mysql
[type] => ->
[args] => Array
(
[0] => SELECT LAST_INSERT_ID()
[1] => integer
)

)

[10] => Array
(
[file] => /mnt/d1/server/www/rudolf/site/dev/components/orm/bin/testmdb2.php
[line] => 23
[function] => lastinsertid
[class] => mdb2_driver_mysql
[type] => ->
[args] => Array
(
)

)

)

[callback] =>
)
ID error
MDB2 Error: not found

[2007-01-29 22:14 UTC] macsnoeren at gmail dot com

Yep, i'm using the latest stable releases.

MDB2 2.3.0 and MDB2_Driver_mysql 1.3.0.

Mmmm. You are getting the correct result?

[2007-01-30 19:56 UTC] macsnoeren at gmail dot com

Is there any dependecies I need to install for a working MDB2 version?

[2007-01-31 13:21 UTC] macsnoeren at gmail dot com

After you're comment I searched what could went wrong. And indeed the mysql driver was not correctly setup. I do not know why, but now it works. Thanks for you're input.

[2007-02-05 11:15 UTC] dkthompson at gmail dot com

Iam getting the exact same error how was this resolved?

[2007-02-07 15:30 UTC] tj42 at free dot fr

Try to insert this line in the first or your file :

ini_set("include_path", realpath(dirname(__FILE__).'/pear').'/');

it was ok for me

(sorry for my english but i'm french! mdr)