1

次のスクリプトは、MySQL の BLOB 列から画像を出力しています。

<?
$dbname="usr_web5_1";
$db = new mysqli($dbhost, $dbuser, $dbpwd, $dbname);
$sql = "SELECT foto, fototype, modified FROM `Komplettverzeichnis_extras` WHERE `WPID`= ?";
$stmt = $db->prepare($sql);
$stmt->bind_param("s",$_GET['id']);
if (!$stmt->execute()) $error=true;
$stmt->bind_result($file,$filetype,$modified);
$stmt->fetch();
if (!isset($filetype)) $filetype = "image/jpeg";
if (!$error) {
    header("Content-type: $filetype;");
    header("Last-Modified: $modified;");
} else {
    echo "Error";
    echo $db->error;
}
echo $file;
$stmt->close();
$db->close();
}
?>

列を LONGBLOB に変更することと、新しい LONGBLOB 列に置き換えることの両方を試みました。画像は表示されません。これは、既に配置されている画像を表示しようとしているか、新しい画像をアップロードしようとしているかに関係ありません.

私が見つけた最も近い問題はここにあります(ドイツ語)。私が使用した列を変更するために

ALTER TABLE `Komplettverzeichnis_extras` CHANGE `foto` `foto` LONGBLOB DEFAULT NULL

明らかに、必要に応じてより多くの情報を提供したいと考えています。

バージョン 3.5.2.2、PHP 5.3.17、および mysql クライアント API バージョン (それは mysql バージョンですか?) 5.1.63 で phpMyAdmin を使用しています。

前もって感謝します!

4

1 に答える 1

0

さて、私は問題を理解しました:

BLOB の場合、上記のコードで使用されている文字列用の mySQLi メソッドが機能します。これは Longblob には当てはまりません。execute() の後、bind_result() の前に、store_result() が必要です。また、保存するときに単純に bind_param() を使用することはできません。代わりに、NULL を使用した次の構造を使用する必要があります。

if (!$stmt = $db->prepare($sql)) printf($db->error);
$null = NULL;
$stmt->bind_param("bsi",$null,$type,$id);
$stmt->send_long_data(0,$data);
if (!$stmt->execute()) printf($db->error);
$stmt->close();

簡単に言うと、次のリソースが役に立ちました: Oswald@Work

とにかく、あなたの努力に感謝します!

于 2012-11-03T20:52:22.567 に答える