ID:               35155
 Updated by:       [EMAIL PROTECTED]
 Reported By:      f dot engelhardt at 21torr dot com
-Status:           Assigned
+Status:           Bogus
 Bug Type:         MySQLi related
 Operating System: Linux 2.6
 PHP Version:      5CVS-2005-11-09 (snap)
-Assigned To:      georg
+Assigned To:      andrey
 New Comment:

Z_STRLEN_PP() macro does not use the strlen() function. It's a macro to
access the real length from the zval** (PP). So, from what I see it
should work correctly. PHP reads the file and is \0 aware so the length
in the zval that represents the string should be ok.
I have done a test and for me it seems to work ok. See the md5() hash
of what's in the column. Just mysql cmdline client does not show the
whole string but stops at the \0. Try with the function LENGTH() and it
will work (shows 8 for me).

mysql> create table blob_test (a mediumblob);
Query OK, 0 rows affected (0.19 sec)
-----------------------------------------------------
php -r '
$c=new mysqli("127.0.0.1", "root","");
var_dump($c);
$s=$c->prepare("INSERT INTO test.blob_test VALUES(?)");
$v="aaaa\0bbb";
$s->bind_param("s",$v);
var_dump($s->execute(), $s->execute());'

-------------------------------------------------------

mysql> select md5("aaaa"), md5("aaaa\0bbb"), md5(a), a from
blob_test\G
*************************** 1. row ***************************
     md5("aaaa"): 74b87337454200d4d33f80c4663dc5e5
md5("aaaa\0bbb"): f04bbe8400c631e6bab90d30900ccc69
          md5(a): f04bbe8400c631e6bab90d30900ccc69
               a: aaaa
*************************** 2. row ***************************
     md5("aaaa"): 74b87337454200d4d33f80c4663dc5e5
md5("aaaa\0bbb"): f04bbe8400c631e6bab90d30900ccc69
          md5(a): f04bbe8400c631e6bab90d30900ccc69
               a: aaaa
2 rows in set (0.00 sec)



Previous Comments:
------------------------------------------------------------------------

[2005-11-17 08:33:56] f dot engelhardt at 21torr dot com

Is there someone working on the bug, i havent heard anything for a
couple of days now.

------------------------------------------------------------------------

[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

------------------------------------------------------------------------

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

Reply via email to