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:
Georg Richter 2005-12-29 09:49:19 +00:00
parent 3795f9d8bb
commit a5acdfc5f2
3 changed files with 39 additions and 0 deletions

1
NEWS
View File

@ -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

View File

@ -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:

View 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"