$serv = "xxx";
$user = "xxx";
$pass = "xxx";
$db = "xxx";
$imgloc = "../images/bg.jpg";
$image = fopen($imgloc, 'rb');
$imageContent = fread($image, filesize($imgloc));
$conn = new mysqli($serv, $user, $pass, $db);
$sql = "INSERT INTO `image`(`advert_id`,`img`) VALUES('1','" . $imageContent . "');";
$conn->query($sql);
我使用上面的代码尝试将二进制文件插入到我的MySQL数据库中,但没有任何内容被发送到数据库。 $ imageContent只在数据库中显示为null,但如果我回显$ imageContent,它似乎显示二进制数据。
advert_id只是一个int字段,img是BLOB
答案 0 :(得分:5)
您的代码无法正常工作的原因是您需要转义数据。
$imageContent = fread($image, filesize($imgloc));
$imageContent = mysqli_real_escape_string($conn, $imageContent);
您没有看到语法错误,类似于:
您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在#8; 8 16 @#54'附近使用正确的语法。第1行......
访问http://php.net/manual/en/mysqli.error.php和http://php.net/manual/en/function.error-reporting.php,然后在文件顶部使用以下内容:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
// rest of your code
这将表示语法错误。
使用mysqli
with prepared statements或PDO with prepared statements
另外,正如迈克布兰特在评论中所说,我引用:
&#34;作为一个切向评论,我建议您确保在MySQL中存储图像blob的确有一个很好的用例。在很多情况下,与仅在数据库中存储文件引用相比,这可能不是一个好主意。&#34;
阅读Stack上的以下Q&amp; A: