mirror of
https://github.com/php/php-src.git
synced 2025-08-16 14:08:47 +02:00
Fixed bug #80908
The last insert ID should be an unsigned integer. Closes GH-6810.
This commit is contained in:
parent
ec8de47e1e
commit
25dc931d83
3 changed files with 53 additions and 1 deletions
3
NEWS
3
NEWS
|
@ -88,6 +88,9 @@ PHP NEWS
|
|||
. Fixed bug #40913 (PDO_MYSQL: PDO::PARAM_LOB does not bind to a stream for
|
||||
fetching a BLOB). (Nikita)
|
||||
|
||||
. PDO MySQL:
|
||||
. Fixed bug#80908 (PDO::lastInsertId() return wrong). (matt)
|
||||
|
||||
. PDO SQLite:
|
||||
. Fixed bug #38334 (Proper data-type support for PDO_SQLITE). (Nikita)
|
||||
|
||||
|
|
|
@ -289,7 +289,7 @@ static zend_string *pdo_mysql_last_insert_id(pdo_dbh_t *dbh, const zend_string *
|
|||
{
|
||||
pdo_mysql_db_handle *H = (pdo_mysql_db_handle *)dbh->driver_data;
|
||||
PDO_DBG_ENTER("pdo_mysql_last_insert_id");
|
||||
PDO_DBG_RETURN(zend_i64_to_str(mysql_insert_id(H->server)));
|
||||
PDO_DBG_RETURN(zend_u64_to_str(mysql_insert_id(H->server)));
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
|
49
ext/pdo_mysql/tests/bug80908.phpt
Normal file
49
ext/pdo_mysql/tests/bug80908.phpt
Normal file
|
@ -0,0 +1,49 @@
|
|||
--TEST--
|
||||
Bug #80908: pdo_mysql lastInsertId() return wrong, when table id bigger than the maximum value of int64
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!extension_loaded('pdo') || !extension_loaded('pdo_mysql')) die('skip not loaded');
|
||||
require_once(__DIR__ . DIRECTORY_SEPARATOR . 'skipif.inc');
|
||||
require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
|
||||
MySQLPDOTest::skip();
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
|
||||
|
||||
function createDB(): PDO {
|
||||
$db = MySQLPDOTest::factory();
|
||||
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
|
||||
return $db;
|
||||
}
|
||||
|
||||
$db = createDB();
|
||||
$db->exec('DROP TABLE IF EXISTS test');
|
||||
$db->exec('CREATE TABLE test (`id` bigint(20) unsigned AUTO_INCREMENT, `name` varchar(5), primary key (`id`)) ENGINE = InnoDB AUTO_INCREMENT=10376293541461622799');
|
||||
|
||||
function testLastInsertId(PDO $db) {
|
||||
echo "Running test lastInsertId\n";
|
||||
$db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
|
||||
try {
|
||||
$db->exec("insert into test (`name`) values ('bar')");
|
||||
$id = $db->lastInsertId();
|
||||
echo "Last insert id is " . $id . "\n";
|
||||
} catch (PDOException $e) {
|
||||
echo $e->getMessage()."\n";
|
||||
}
|
||||
}
|
||||
|
||||
testLastInsertId($db);
|
||||
unset($db);
|
||||
echo "\n";
|
||||
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php
|
||||
require __DIR__ . '/mysql_pdo_test.inc';
|
||||
MySQLPDOTest::dropTestTable();
|
||||
?>
|
||||
--EXPECT--
|
||||
Running test lastInsertId
|
||||
Last insert id is 10376293541461622799
|
Loading…
Add table
Add a link
Reference in a new issue