我又回到了编程状态,我现在卡住了,因为我无法将图像上传到我的数据库。 我昨晚正在阅读一些代码和答案,我仍然被困在这里......它返回“成功创建新记录”,但我的数据库中没有存储任何内容。希望有人能帮我解决这个问题:)谢谢!
<form method="post" action="" enctype="multipart/form-data">
Upload File:
<input type="file" name="upload" /><br>
<input type="submit" name="submit" value="Submit"/>
</form>
</body>
</html>
<?php
$servername ="localhost";
$username = "root";
$password = "";
$dbname = "produ_db";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
if(isset($_POST['submit']) ){
$filename = $conn->real_escape_string($_FILES['upload']['name']);
$filedata= $conn->real_escape_string(file_get_contents($_FILES['upload']['tmp_name']));
if ($_FILES['upload']['name'] == 0 ){
echo "<br><br> New record created successfully";
}
else {
/*where acc_cap is the image caption && acc_img is a blob type to store images*/
$query = "INSERT INTO accessories(`acc_cap`,`acc_img`) VALUES ('$filename','$filedata')" ;
if ($conn->query($query) === TRUE) {
echo "<br><br> New record created successfully";
} else {
echo "Error:<br>" . $conn->error;
}
}
$conn->close();
}
?>
答案 0 :(得分:1)
1 - 你有:
echo "<br><br> New record created successfully";
两次 - 成功(INSERT之后)和失败($_FILES['upload']['name'] == 0
)。更改失败消息,以便了解正在发生的事情。
2 - 移动:
$filename = $conn->real_escape_string($_FILES['upload']['name']);
$filedata= $conn->real_escape_string(file_get_contents($_FILES['upload']['tmp_name']));
跟随$_FILES['upload']['name']
的测试,因为如果没有文件名,file_get_contents函数将失败。
3 - 检查我自己的代码,看起来我通常使用$_FILES['upload']['name'] == ''
而不是== 0
。 PHP通常同样处理0和空字符串,但在这种情况下,我认为空字符串是正确的比较,因为当它具有实际文件名时,这是一个字符串字段。
4 - 通常被认为是在数据库中存储完整图像(或其他)文件的错误形式 - 最好只在数据库中存储文件系统(参见http://php.net/manual/en/function.move-uploaded-file.php)。话虽如此,有时它是有道理的,我有时会在数据库中存储完整的文件。