Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php将图像上载到sql数据库时显示错误_Php_Html_Mysql - Fatal编程技术网

使用php将图像上载到sql数据库时显示错误

使用php将图像上载到sql数据库时显示错误,php,html,mysql,Php,Html,Mysql,下面的代码将图像上载到名为upload\u image的sql数据库 if(isset($_POST['submit'])){ $target_path = "images/"; $target_path = $target_path . basename($_FILES['file']['name']); if(move_uploaded_file($_FILES['file']['tmp_name'], $target_path)){ $conn =ne

下面的代码将图像上载到名为
upload\u image
的sql数据库

if(isset($_POST['submit'])){
$target_path = "images/";
$target_path = $target_path . basename($_FILES['file']['name']);
if(move_uploaded_file($_FILES['file']['tmp_name'], $target_path)){
         $conn =new mysqli("localhost", "root", "", "upload_image");
         $sql = "Insert into upload_image('path') values('$target_path')";
         if($conn->query($sql)==TRUE){
             echo"<br><br>";
         }else{
             echo "Error on upload".$sql.$conn->error;
         }
    }   
}
if(isset($\u POST['submit'])){
$target_path=“images/”;
$target\u path=$target\u path.basename($\u FILES['file']['name']);
如果(移动上传的文件($文件['file']['tmp\u名称],$target\u路径)){
$conn=newmysqli(“localhost”、“root”、“upload_image”);
$sql=“插入上载图像('path')值('$target_path')”;
if($conn->query($sql)==TRUE){
回声“

”; }否则{ 回显“上传时出错”。$sql.$conn->错误; } } }
显示的错误为

上载时出错将插入上载图像(“路径”)值(“图像/ao.png”)

您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,以了解在第1行使用接近“path”)值('images/ao.png')的正确语法

以下是HTML部分:

<form method="post" enctype="multipart/form-data">
<input type="hidden" value=="1000000" name="MAX_FILE_SIZE"/>
<input type="file" name="file"/>
<input type="submit" name="submit" value="Upload"/>


HTML和PHP都在一个代码中。

行:

$sql = "Insert into upload_image('path') values('$target_path')";
$sql = "Insert into upload_image(path) values('$target_path')";
应该是:

$sql = "Insert into upload_image('path') values('$target_path')";
$sql = "Insert into upload_image(path) values('$target_path')";
换句话说,查询中的列名周围不应该有引号

对于可读性:可以使用带关键字的大小写

$sql = "INSERT INTO upload_image (path) VALUES ('$target_path')";
为了安全:可以使用准备好的语句

代码容易受到SQL注入的攻击,因此更好的方法是使用准备好的语句,即

$sql = "INSERT INTO upload_image (path) VALUES (?)";
$stmt = $conn->prepare($sql);
$stmt->bind("s", $target_path);
$stmt->execute();

正确的语法应该是

INSERT INTO upload_image (path) VALUES ('$target_path')

不带引号的fieldname是一个字符串,而不是一列。删除引号,这些是字符串的引号。如果使用特殊字符或保留术语,请使用反勾号。您还可以接受SQL注入参数化查询。它成功了,再次感谢您可能重复:警告可能重复:使用
mysqli
时,您应该使用和向查询中添加用户数据。不要使用字符串插值或串联来完成此操作,因为您已经创建了严重的错误。切勿将
$\u POST
$\u GET
或任何用户数据直接放入查询中,如果有人试图利用您的错误,这可能是非常有害的。
$target\u path
位于查询中也是一个巨大的问题。@tadman在这种情况下,为什么查询中的$target\u路径会成为问题?它将被处理(在这种情况下,单引号不会阻止变量的处理),并将被替换为实际值。您知道该字符串中包含什么吗?我不。它可能是任何东西,也可能是。@tadman好吧,我明白你的意思。我的回答只是简单地解决了这个问题,因为它指出了语法错误,但当然可以通过重写代码来改进代码,例如,作为一个准备好的语句来防止sql注入。@tadman我根据您的建议编辑了答案,以包括一个准备好的语句。