这是我的代码
<?php
mysqli_connect('localhost','root','','vuap');
if(isset($_POST['submit'])){
$name = $_FILES['file']['name'];
$temp = $_FILES['file']['temp_name'];
move_uploaded_file($temp,"uploaded/".$name);
mysqli_query("INSERT INTO video ('movie') VALUE (''$name')" );
}
<form action="index.php" method="post" enctype="multipart/form-data">
<input type="file" name="file" >
<input type="submit" name="submit" value="gonder">
</form>
<?php
if(isset($_POST['submit'])){
echo "<br>".$name."has been uploaded";
};
?>
出于某种原因,我可以上传图片而不上传视频。
答案 0 :(得分:2)
您的代码中存在很多错误。
由于三个原因,此VALUE
会破坏您的查询。
IF ...这是您的真实代码。
不,它不是''$name'
,它的左侧和右侧是什么以及您没有做什么,执行查询。
在查询中使用错误检查http://php.net/manual/en/mysqli.error.php,会告诉您使用表格的标识符限定符作为常规引号而不是刻度或根本没有引号的语法错误,以及附加引用在$connect = mysqli_connect('localhost','root','','vuap')
or die (mysqli_error($connect));
。
请参阅以下有关MySQL中标识符限定符的内容:
您还需要为连接分配变量并检查错误。
$result = mysqli_query($connect, "INSERT INTO video (`movie`) VALUE ('$name')" );
然后将其添加到您的查询中:
if(!$result){
echo "Error: " . mysqli_error($connect);
}
else {
echo "Success!";
}
然后
if(isset($_POST['submit'])){
echo "<br>".$name."has been uploaded";
};
你也不需要这个,只需删除它:
VALUE
并确保您要上传的文件夹具有正确的权限,可以写入该文件夹以及您要上传的视频是否在允许的最大尺寸范围内。
咨询:PHP change the maximum upload file size
旁注:对于那些认为INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name
[PARTITION (partition_name,...)]
[(col_name,...)]
{VALUES | VALUE} ({expr | DEFAULT},...),(...),...
[ ON DUPLICATE KEY UPDATE
col_name=expr
[, col_name=expr] ... ]
无效的人,它就在MySQL中。
咨询:http://dev.mysql.com/doc/refman/5.7/en/insert.html
示例:
$name = $_FILES['file']['name'];
$name = mysqli_real_escape_string($connect, $name);
<强>脚注:强>
您目前的代码向SQL injection开放。使用mysqli_*
with prepared statements或PDO与prepared statements。
附加说明:
如果您想要将数据上传为二进制而不是字符串,则需要使用BLOB或LONGBLOB并转义数据。
否则,它会给你一个错误。
即:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// Then the rest of your code
参考BLOB上的手册:
将error reporting添加到文件的顶部,这有助于查找错误。
{{1}}
旁注:只应在暂存时进行显示错误,而不是生产。