mirror of
https://github.com/php/php-src.git
synced 2024-11-23 18:04:36 +08:00
Fix for bug #35517:
added missing unsigned flag for result buffer fixed returncode in mysql_stmt_fetch for data truncation
This commit is contained in:
parent
3795f9d8bb
commit
a5acdfc5f2
1
NEWS
1
NEWS
@ -14,6 +14,7 @@ PHP NEWS
|
||||
- Fixed bug #35781 (stream_filter_append() can cause segfault). (Tony)
|
||||
- Fixed bug #35759 (mysqli_stmt_bind_result() makes huge allocation when
|
||||
column empty). (Andrey)
|
||||
- Fixed bug #35517 (mysql_stmt_fetch returns NULL on data truncation). (Georg)
|
||||
- Fixed bug #29955 (mb_strtoupper() / lower() broken with Turkish encoding).
|
||||
(Rui)
|
||||
- Fixed bug #28899 (mb_substr() and substr() behave differently when
|
||||
|
@ -299,6 +299,7 @@ PHP_FUNCTION(mysqli_stmt_bind_result)
|
||||
bind[ofs].buffer_type = MYSQL_TYPE_LONG;
|
||||
bind[ofs].buffer = stmt->result.buf[ofs].val;
|
||||
bind[ofs].is_null = &stmt->result.is_null[ofs];
|
||||
bind[ofs].is_unsigned = (stmt->stmt->fields[ofs].flags & UNSIGNED_FLAG) ? 1 : 0;
|
||||
break;
|
||||
|
||||
case MYSQL_TYPE_LONGLONG:
|
||||
@ -309,6 +310,7 @@ PHP_FUNCTION(mysqli_stmt_bind_result)
|
||||
bind[ofs].buffer = stmt->result.buf[ofs].val;
|
||||
bind[ofs].is_null = &stmt->result.is_null[ofs];
|
||||
bind[ofs].buffer_length = stmt->result.buf[ofs].buflen;
|
||||
bind[ofs].is_unsigned = (stmt->stmt->fields[ofs].flags & UNSIGNED_FLAG) ? 1 : 0;
|
||||
break;
|
||||
|
||||
case MYSQL_TYPE_DATE:
|
||||
@ -721,6 +723,13 @@ PHP_FUNCTION(mysqli_stmt_fetch)
|
||||
|
||||
switch (ret) {
|
||||
case 0:
|
||||
#ifdef MYSQL_DATA_TRUNCATED
|
||||
/* according to SQL standard truncation (e.g. loss of precision is
|
||||
not an error) - for detecting possible truncation you have to
|
||||
check mysqli_stmt_warning
|
||||
*/
|
||||
case MYSQL_DATA_TRUNCATED:
|
||||
#endif
|
||||
RETURN_TRUE;
|
||||
break;
|
||||
case 1:
|
||||
|
29
ext/mysqli/tests/bug35517.phpt
Normal file
29
ext/mysqli/tests/bug35517.phpt
Normal file
@ -0,0 +1,29 @@
|
||||
--TEST--
|
||||
Bug #35517 mysqli_stmt_fetch returns NULL
|
||||
--SKIPIF--
|
||||
<?php require_once('skipif.inc'); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
include "connect.inc";
|
||||
|
||||
$mysql = new mysqli($host, $user, $passwd, "test");
|
||||
|
||||
$mysql->query("CREATE TABLE temp (id INT UNSIGNED NOT NULL)");
|
||||
$mysql->query("INSERT INTO temp (id) VALUES (3000000897),(3800001532),(3900002281),(3100059612)");
|
||||
|
||||
$stmt = $mysql->prepare("SELECT id FROM temp");
|
||||
$stmt->execute();
|
||||
$stmt->bind_result($id);
|
||||
while ($stmt->fetch()) {
|
||||
var_dump($id);
|
||||
}
|
||||
$stmt->close();
|
||||
|
||||
$mysql->query("DROP TABLE temp");
|
||||
$mysql->close();
|
||||
?>
|
||||
--EXPECTF--
|
||||
string(10) "3000000897"
|
||||
string(10) "3800001532"
|
||||
string(10) "3900002281"
|
||||
string(10) "3100059612"
|
Loading…
Reference in New Issue
Block a user