sj-i / notes.bugs.php.net

0 stars 0 forks source link

Bug #40913 | PDO_MYSQL: PDO::PARAM_LOB does not bind to a stream for fetching a BLOB #1

Closed sj-i closed 3 years ago

sj-i commented 3 years ago
sj-i commented 3 years ago
Description:
------------
PDOStatement::bindColumn($idx, $var, PDO::PARAM_LOB) for SELECT query makes $var a string with the BLOB Data rather than a stream, for both MySQL and SQLite.

Reproduce code:
---------------
$id = (int)$_REQUEST['book'];
$stmt = $conn->prepare("SELECT coverMime, coverImage FROM books WHERE id=$id");
$stmt->execute();
$stmt->bindColumn(1, $mime);
$stmt->bindColumn(2, $image, PDO::PARAM_LOB);
$stmt->fetch(PDO::FETCH_BOUND);
var_dump($image);

Expected result:
----------------
Resource #1

Actual result:
--------------
String(792) {GIF89a...}
sj-i commented 3 years ago

https://www.php.net/manual/ja/pdo.lobs.php PDO::PARAM_LOB でラージオブジェクト指定によりストリームが手に入る筈のところで、MySQL and SQLite 両方で文字列が手に入るという問題

sj-i commented 3 years ago

こんだけ長いと逆に直したら後方互換性問題になるのでは、と思ったら nikic の人がアサインされてたのでこれは放置でよさそう

sj-i commented 3 years ago

https://github.com/php/php-src/commit/caa710037e663fd78f67533b29611183090068b2 で解決したのでクローズ