ID: 35155 User updated by: f dot engelhardt at 21torr dot com Reported By: f dot engelhardt at 21torr dot com Status: Assigned Bug Type: MySQLi related Operating System: Linux 2.6 PHP Version: 5CVS-2005-11-09 (snap) Assigned To: georg New Comment:
Is there someone working on the bug, i havent heard anything for a couple of days now. Previous Comments: ------------------------------------------------------------------------ [2005-11-14 12:07:04] f dot engelhardt at 21torr dot com Note: with the PDO it is working as expectet, but we can not use software that is still in a beta stadium. ------------------------------------------------------------------------ [2005-11-12 01:22:11] [EMAIL PROTECTED] Georg, see the feedback. ------------------------------------------------------------------------ [2005-11-11 11:33:32] f dot engelhardt at 21torr dot com case MYSQL_TYPE_VAR_STRING: convert_to_string_ex(&stmt->param.vars[i]); stmt->stmt->params[i].buffer = Z_STRVAL_PP(&stmt->param.vars[i]); stmt->stmt->params[i].buffer_length = strlen(Z_STRVAL_PP(&stmt->param.vars[i])); break; php-5.0.5/ext/mysqli/mysqli_api.c:574 This line is the problem, you can not use strlen to read the length of binary data, or this convert_to_string_ex() function destroys the data. Kind regards Florian Engelhardt ------------------------------------------------------------------------ [2005-11-11 11:18:27] f dot engelhardt at 21torr dot com Hello, i have a hint for you: The size inserted into the database is exactly the size, that strlen() returns, BUT: strlen stops on the first \0 and in a real binary file, this sign can be everywhere, not just at the end. In your case, i found this: php-5.0.5/ext/mysqli/mysqli_api.c:161 case 's': /* string */ bind[ofs].buffer_type = MYSQL_TYPE_VAR_STRING; bind[ofs].buffer = NULL; bind[ofs].buffer_length = 0; bind[ofs].is_null = &stmt->param.is_null[ofs]; I tried this, and i found out, that it works with MYSQL_TYPE_VAR_STRING, but you have to specify the length. If i insert the right lengt, everything works as expected. So you just have to define the length for the data that is in the bound variable. Kind regards Florian Engelhardt ------------------------------------------------------------------------ [2005-11-11 09:55:55] f dot engelhardt at 21torr dot com Well, i allready tried this: <?php mysqli_connect(..); mysqli_select_db(..); $s = file_get_contents('/usr/portage/distfiles/vim-runtime-20050601.tar.bz2'); $one = 1; $two = 2; $q = 'INSERT INTO dbfs_data_chunk VALUES (?,?,?)'; $stmt = mysqli_stmt_init($GLOBALS['CONN']); mysqli_stmt_prepare($stmt,$q); mysqli_stmt_bind_param($stmt,'iis',$one,$two,$s); mysqli_stmt_execute($stmt); mysqli_stmt_close($stmt); exit; ?> Exaclty the same problem. Fix it. Kind Regards Florian Engelhardt ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/35155 -- Edit this bug report at http://bugs.php.net/?id=35155&edit=1