php - 使用 PHP 在 MySQL 中插入图像时出错

标签 php mysql mysqli

我是 PHP 的新手,我制作了一个要插入数据库的表单,当我想插入图像时无法插入错误,在数据库中图像的类型是“longblob”,我附上了表格和。 PHP 插入数据库。

表格:

<form align="center" action="guardar.php" method="POST" enctype="multipart/form-data">
    <input type="text" REQUIRED name="titulo" placeholder="Titulo.." value=""/><br><br>
    <input type="text" REQUIRED name="contenido" placeholder="Contenido.." value=""/><br><br>
    <input type="text" REQUIRED name="fecha" placeholder="Fecha.." value=""/><br><br>
    <input type="file" REQUIRED name="imagen" /><br><br>
    <input type="submit" name="Aceptar" />
</form>

PHP

<?php

include("conexion.php");

$titulo=$_POST['titulo'];
$contenido=$_POST['contenido'];
$fecha=$_POST['fecha'];
$imagen=addslashes(file_get_contents($_FILES['imagen']['tmp_name']));

$query="INSERT INTO articulos(titulo,contenido,fecha,imagen) VALUES('$titulo','$contenido','$fecha','$imagen')";

mysqli_query($conexion, $query);
$resultado=$conexion->query($query);

if($resultado){
    echo "INSERT";
}else{
    echo "No INSERT";
}

?>

最佳答案

你不应该使用 file_get_contents(),这是错误的函数 - 它完全做了其他事情(如果你对这个函数的作用感到好奇,你可以阅读手册)。除了使用直接注入(inject)值的查询,您还应该使用准备好的语句,如下所示。

这将防止 SQL 注入(inject)攻击,并确保没有数据会破坏查询。

<?php

include "conexion.php";

$titulo = $_POST['titulo'];
$contenido = $_POST['contenido'];
$fecha = $_POST['fecha'];
$imagen = $_FILES['imagen']['tmp_name'];

$query = "INSERT INTO articulos (titulo, contenido, fecha, imagen) VALUES (?, ?, ?, ?)";

if ($stmt = $conexion->prepare($query)) {
    $stmt->bind_param("ssss", $titulo, $contenido, $fecha, $imagen);
    if ($stmt->execute()) {
        echo "Inserted");
    } else {
        // Do some logging
        error_log($stmt->error);
        echo "Not inserted";
    }
} else {
    // Do some logging
    error_log($conexion->error);
    echo "Not inserted";
}

关于php - 使用 PHP 在 MySQL 中插入图像时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52893747/

相关文章:

php - 如何通过向数据库提交表单将 youtube 短 url 更改为可嵌入值?

JavaScript 验证不会停止提交到 php 脚本

php - 在 zend 框架中使用 LIMIT 进行更新

php - 将预构建的 Laravel 站点安装到本地 MAMP 服务器上

php - MYSQL建表错误 "A table must have 1 Column"

mysql - 来自 Sql 数据库的简单随机样本

php - mysqli prepare() 返回 bool 值 true 而不是语句对象

php - 从数据库中获取答案

php - Vtiger 6.2 登录后显示空白页面

php - 使用 GET 表单向 URL 添加额外参数