mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +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
|
. Fixed bug #40913 (PDO_MYSQL: PDO::PARAM_LOB does not bind to a stream for
|
||||||
fetching a BLOB). (Nikita)
|
fetching a BLOB). (Nikita)
|
||||||
|
|
||||||
|
. PDO MySQL:
|
||||||
|
. Fixed bug#80908 (PDO::lastInsertId() return wrong). (matt)
|
||||||
|
|
||||||
. PDO SQLite:
|
. PDO SQLite:
|
||||||
. Fixed bug #38334 (Proper data-type support for PDO_SQLITE). (Nikita)
|
. 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_mysql_db_handle *H = (pdo_mysql_db_handle *)dbh->driver_data;
|
||||||
PDO_DBG_ENTER("pdo_mysql_last_insert_id");
|
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