将二进制插入mysql斑点


$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的形式出现

advard_id只是一个int字段,img是blob

您的代码不起作用的原因是您需要逃脱数据。

$imageContent = fread($image, filesize($imgloc)); 
$imageContent = mysqli_real_escape_string($conn, $imageContent);

您没有看到语法错误,类似于:

您在SQL语法中有错误;查看与您的MySQL Server版本相对应的手册,以获取正确的语法,以接近" 8 16@#54",第1行...

  • 因为您没有检查错误。

访问http://php.net/manual/en/mysqli.error.php and http://php.net/manual/manual/en/en/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带有准备的语句,或 pdo带有准备的语句


plus,正如迈克·布兰特(Mike Brant)在评论中所说的那样,我引用:

"作为切线评论,我建议您确实有一个很好的用例,用于在mysql中存储图像。在很多情况下,与简单存储相比,这可能不是一个好主意数据库中的文件引用。"

  • 迈克说实话。您的数据库会随着时间的流逝而大大增加,因此将文件的副本存储在文件夹中,然后对其进行引用,通常是一个更好的主意,但这完全取决于您。

在堆栈上读取以下Q&amp; a:

  • php:将图像存储到mysql斑点中,好坏?
  • 将图像存储在db-是的或否?

最新更新