У меня здесь есть рабочий код о том, как вставлять, отображать и извлекать BLOB-файлы в базе данных MySQL, используя php.проблема в том, что некоторые файлы, в том числе pdf, mp3 и т. д., не могут быть вставлены в базу данных и выдают эту ошибку:
(Предупреждение: mysqli :: query (): сервер MySQL исчез в C: \ wamp64 \ www \ add_file.php в строке 28) и (Предупреждение: mysqli :: query (): ошибка чтения заголовка набора результатов в C: \ wamp64 \ www \ add_file.php в строке 28).
Я создал соединение со следующими ... server="localhost"
, username="root'
, password=""
, dbname="recordmain_db"
, и я создаю таблицу, помещая код на вкладке sql в phpmyadmin,Любая помощь будет высоко оценена.Заранее спасибо.
Создание таблицы в Phpmyadmin
CREATE TABLE `file` (
`id` Int Unsigned Not Null Auto_Increment,
`name` VarChar(255) Not Null Default 'Untitled.txt',
`mime` VarChar(50) Not Null Default 'text/plain',
`size` BigInt Unsigned Not Null Default 0,
`data` MediumBlob Not Null,
`created` DateTime Not Null,
PRIMARY KEY (`id`)
)
Файл загрузки HTML (uploadsample.php)
<!DOCTYPE html>
<head>
<title>MySQL file upload example</title>
<meta http-equiv="content-type" content="text/html;
charset=UTF-8">
</head>
<body>
<form action="add_file.php" method="post"
enctype="multipart/form-data">
<input type="file" name="uploaded_file" required ><br>
<input type="submit" value="Upload file">
</form>
<p>
<a href="list_files.php">See all files</a>
</p>
</body>
</html>
PHP-код для добавления данных в базу данных (add_file.php)
<code><?php
// Check if a file has been uploaded
if(isset($_FILES['uploaded_file'])) {
// Make sure the file was sent without errors
if($_FILES['uploaded_file']['error'] == 0) {
// Connect to the database
$dbLink = new mysqli('localhost', 'root', '',
'recordmain_db');
if(mysqli_connect_errno()) {
die("MySQL connection failed: ".
mysqli_connect_error());
}
// Gather all required data
$name = $dbLink-
>real_escape_string($_FILES['uploaded_file']['name']);
$mime = $dbLink-
>real_escape_string($_FILES['uploaded_file']['type']);
$data = $dbLink-
>real_escape_string(file_get_contents($_FILES
['uploaded_file']['tmp_name']));
$size = intval($_FILES['uploaded_file']['size']);
// Create the SQL query
$query = "
INSERT INTO `file` (
`name`, `mime`, `size`, `data`, `created`
)
VALUES (
'{$name}', '{$mime}', {$size}, '{$data}', NOW()
)";
// Execute the query
$result = $dbLink->query($query);
// Check if it was successfull
if($result) {
echo 'Success! Your file was successfully added!';
}
else {
echo 'Error! Failed to insert the file'
. "<pre>{$dbLink->error}
";}} else {echo 'Ошибка при загрузке файла.'. 'Код ошибки:'. intval ($ _ FILES [' uploaded_file '] [' error ']);} // Закрыть соединение mysql $ dbLink-> close ();} else {echo' Ошибка! Файл не был отправлен! ';} // Выводить ссылку на главную страницу echo '
Нажмите здесь , чтобы вернуться
';?>
Отображение данных из базы данных sqld в формате htmltable (list_files.php)
<code><?php
// Connect to the database
$dbLink = new mysqli('localhost', 'root', '',
'recordmain_db');
if(mysqli_connect_errno()) {
die("MySQL connection failed: ". mysqli_connect_error());
}
// Query for a list of all existing files
$sql = 'SELECT `id`, `name`, `mime`, `size`, `created` FROM
`file`';
$result = $dbLink->query($sql);
// Check if it was successfull
if($result) {
// Make sure there are some files in there
if($result->num_rows == 0) {
echo '<p>There are no files in the database</p>';
}
else {
// Print the top of a table
echo '<table width="100%">
<tr>
<td><b>Name</b></td>
<td><b>Mime</b></td>
<td><b>Size (bytes)</b></td>
<td><b>Created</b></td>
<td><b> </b></td>
</tr>';
// Print each file
while($row = $result->fetch_assoc()) {
echo "
<tr>
<td>{$row['name']}</td>
<td>{$row['mime']}</td>
<td>{$row['size']}</td>
<td>{$row['created']}</td>
<td><a href='get_file.php?id=
{$row['id']}'>Download</a></td>
</tr>";
}
// Close table
echo '</table>';
}
// Free the result
$result->free();
}
else
{
echo 'Error! SQL query failed:';
echo "<pre>{$dbLink->error}
";} // Закрыть соединение mysql $ dbLink-> close ();?> Home
Получить файл из ссылки на скачивание списка таблиц (get_file.php)
<code><?php
// Make sure an ID was passed
if(isset($_GET['id'])) {
// Get the ID
$id = intval($_GET['id']);
// Make sure the ID is in fact a valid ID
if($id <= 0) {
die('The ID is invalid!');
}
else {
// Connect to the database
$dbLink = new mysqli('localhost', 'root', '',
'recordmain_db');
if(mysqli_connect_errno()) {
die("MySQL connection failed: ".
mysqli_connect_error());
}
// Fetch the file information
$query = "
SELECT `mime`, `name`, `size`, `data`
FROM `file`
WHERE `id` = {$id}";
$result = $dbLink->query($query);
if($result) {
// Make sure the result is valid
if($result->num_rows == 1) {
// Get the row
$row = mysqli_fetch_assoc($result);
// Print headers
header("Content-Type: ". $row['mime']);
header("Content-Length: ". $row['size']);
header("Content-Disposition: attachment;
filename=". $row['name']);
// Print data
echo $row['data'];
}
else {
echo 'Error! No image exists with that ID.';
}
// Free the mysqli resources
@mysqli_free_result($result);
}
else {
echo "Error! Query failed: <pre>{$dbLink->error}
";} @mysqli_close ($ dbLink);}} else {echo 'Ошибка! ID не передан.';}?>