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 #35781 (stream_filter_append() can cause segfault). (Tony)
|
||||||
- Fixed bug #35759 (mysqli_stmt_bind_result() makes huge allocation when
|
- Fixed bug #35759 (mysqli_stmt_bind_result() makes huge allocation when
|
||||||
column empty). (Andrey)
|
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).
|
- Fixed bug #29955 (mb_strtoupper() / lower() broken with Turkish encoding).
|
||||||
(Rui)
|
(Rui)
|
||||||
- Fixed bug #28899 (mb_substr() and substr() behave differently when
|
- 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_type = MYSQL_TYPE_LONG;
|
||||||
bind[ofs].buffer = stmt->result.buf[ofs].val;
|
bind[ofs].buffer = stmt->result.buf[ofs].val;
|
||||||
bind[ofs].is_null = &stmt->result.is_null[ofs];
|
bind[ofs].is_null = &stmt->result.is_null[ofs];
|
||||||
|
bind[ofs].is_unsigned = (stmt->stmt->fields[ofs].flags & UNSIGNED_FLAG) ? 1 : 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MYSQL_TYPE_LONGLONG:
|
case MYSQL_TYPE_LONGLONG:
|
||||||
@ -309,6 +310,7 @@ PHP_FUNCTION(mysqli_stmt_bind_result)
|
|||||||
bind[ofs].buffer = stmt->result.buf[ofs].val;
|
bind[ofs].buffer = stmt->result.buf[ofs].val;
|
||||||
bind[ofs].is_null = &stmt->result.is_null[ofs];
|
bind[ofs].is_null = &stmt->result.is_null[ofs];
|
||||||
bind[ofs].buffer_length = stmt->result.buf[ofs].buflen;
|
bind[ofs].buffer_length = stmt->result.buf[ofs].buflen;
|
||||||
|
bind[ofs].is_unsigned = (stmt->stmt->fields[ofs].flags & UNSIGNED_FLAG) ? 1 : 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MYSQL_TYPE_DATE:
|
case MYSQL_TYPE_DATE:
|
||||||
@ -721,6 +723,13 @@ PHP_FUNCTION(mysqli_stmt_fetch)
|
|||||||
|
|
||||||
switch (ret) {
|
switch (ret) {
|
||||||
case 0:
|
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;
|
RETURN_TRUE;
|
||||||
break;
|
break;
|
||||||
case 1:
|
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