|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
Patchesmysql_insert_id_convert_to_uint64_t (last revision 2021-03-26 07:10 UTC by atlanticfeng at icloud dot com)Pull Requests
Pull requests:
HistoryAllCommentsChangesGit/SVN commits
[2021-04-16 07:29 UTC] twosee@php.net
-Status: Open
+Status: Verified
[2021-04-16 07:45 UTC] nikic@php.net
[2021-04-16 07:46 UTC] twosee@php.net
[2021-04-16 07:51 UTC] twosee@php.net
[2021-04-26 09:50 UTC] git@php.net
[2021-04-26 09:50 UTC] git@php.net
-Status: Verified
+Status: Closed
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Mon Oct 27 03:00:02 2025 UTC |
Description: ------------ - Latest or earlier version has this problem. - My tests version is PHP-master-Git-2021-03-26(Git). - In php, i use the pdo method: PDO::lastInsertId(), when MySQL table's auto_increment id bigger than int64, eg: 10376293541461622848, the method return a wrong result, is's like return '-8070450532247928768'. - It's because the `static zend_string *pdo_mysql_last_insert_id(pdo_dbh_t *dbh, const zend_string *name)` use funtion `php_pdo_int64_to_str(int64_t i64)` to convert the mysql api funciton `last_insert_id()`, it should use `uint64_t`. - In MySQL Reference Manual, `last_insert_id` With no argument, LAST_INSERT_ID() returns a BIGINT UNSIGNED (64-bit), With an argument, LAST_INSERT_ID() returns an unsigned integer. Is'a always greater than zero. Test script: --------------- <?php try { // My localhost mysql server, version is 5.7.0 $dbh = new PDO('mysql:127.0.0.1:33060;dbname=test', 'root', 'secret'); // In table `foo`, have 2 columns, primary key `id` auto_increment=10376293541461622848, name is a varchar(20) $dbh->exec("insert into foo (`name`) values ('bar')"); echo $dbh->lastInsertId() . PHP_EOL; } catch( PDOExecption $e ) { print "Error!: " . $e->getMessage() . "</br>"; } Expected result: ---------------- return "10376293541461622849" Actual result: -------------- return "-8070450532247928768"