Lobs with mysqli in PHP 5.3
We got away with a bit of lazy PHP, at least through PHP 5.29. Especially when we worked with LOB columns. All that is at an end with PHP 5.3. You must now call the mysqli_stmt_store_results($stmt);
function (line number 76 in the program snippet below from source) between the execute and bind result phrases.
The function transfers a result set from a prepared statement. You need to use it when performing a SELECT
, SHOW
, DESCRIBE
, or EXPLAIN
statement that you will call by the mysqli_stmt_fetch($stmt);
function.
Without using it, you may only see part of a MEDIUMTEXT
column displayed. Likewise, an image from a MEDIUMBLOB
column won’t be displayed at all unless you store their results too, by using the same function call.
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | // Prepare statement. if (mysqli_stmt_prepare($stmt,$sql)) { mysqli_stmt_bind_param($stmt,"i",$id); // Execute it and print success or failure message. if (mysqli_stmt_execute($stmt)) { // Store result, which eliminates memory cutting off lob streams. mysqli_stmt_store_result($stmt); // Bind result to local variable. mysqli_stmt_bind_result($stmt, $desc); // Read result. mysqli_stmt_fetch($stmt); // Print result. print $desc; } } |
Also, that oldie ereg()
function is deprecated for preg_match()
in PHP 5.3 and removed in PHP 6. Don’t forget to make those changes if you were lazy like me before updating to PHP 5.3.