Bug #77067 [Opn]: Inserting a BLOB from a stream transforms it to a string
Edit report at https://bugs.php.net/bug.php?id=77067&edit=1
ID: 77067
Updated by: cmb@php.net
Reported by: php at bohwaz dot net
Summary: Inserting a BLOB from a stream transforms it to a
string
Status: Open
Type: Bug
-Package: PDO SQLite
+Package: PDO related
Operating System: All
PHP Version: 7.3.0RC4
Block user comment: N
Private report: N
New Comment:
The same happens with PDO_MySQL if emulated prepares are disabled.
PDO_ODBC may convert non-string parameters to string.
Previous Comments:
------------------------------------------------------------------------
[2018-12-05 10:57:46] sjon at hortensius dot net
FWIW this isn't necessarily 7.3 specific - it has been like this ever since php 7.0, see https://3v4l.org/tg2Gl
------------------------------------------------------------------------
[2018-10-26 14:14:35] php at bohwaz dot net
Description:
------------
If passing a stream as a parameter of PDOStatement::bindParam it is transformed to a string which
contains the stream contents.
For example this prevents reusing the stream handle to close it properly or to truncate or change
the file contents.
Test script:
---------------
<?php
$pdo = new PDO('sqlite::memory:');
$pdo->exec('CREATE TABLE test (a INTEGER, b BLOB);');
$fp = tmpfile();
fwrite($fp, 'Random stuff!');
fseek($fp, 0);
$stmt = $pdo->prepare('INSERT INTO test VALUES (?, ?);');
$stmt->bindValue(1, 42);
$stmt->bindParam(2, $fp, PDO::PARAM_LOB);
$stmt->execute();
var_dump(gettype($fp));
Expected result:
----------------
resource
Actual result:
--------------
string
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=77067&edit=1
Thread (3 messages)