Задать вопрос
vanesxl
@vanesxl

Ошибка записи файлов в базе данных, как решить?

Здравствуйте,
разрабатываю веб интерфейс.
Необходимо файлы сохранять в базе данных. (не ругайтесь, это тз)
Создал таблицу, столбец в которой имеет тип longblob
настроил php чтобы пропускал файлы по больше
написал не сложный php скрипт который собственно и занимается загрузкой файлов и записью их в базу.
$allowed = array('png', 'jpg', 'gif', 'jpeg');
if(isset($_FILES['upl']) && $_FILES['upl']['error'] == 0){
	$extension = pathinfo($_FILES['upl']['name'], PATHINFO_EXTENSION);
	if(!in_array(strtolower($extension), $allowed)){
		echo '{"status":"error"}';
		exit;
	}
	$files = file_get_contents( $_FILES['upl']['tmp_name'] );
	$files = mysql_escape_string( $files );
	$mime = $_FILES['upl']['type'];
	$size = $_FILES['upl']['size'];
	$name = $_FILES['upl']['name'];
	$kode = $_SESSION['kode'];
	
	if(isset($_SESSION['img_id']) and $_SESSION['img_id']!=''){
		$imgID = $_SESSION['img_id'];
		$sql = "INSERT INTO img (content,leng,mime,name,kod_users) VALUES ('$files','$size','$mime','$name','$imgID')";
	}
	else
	{
		$sql = "INSERT INTO img (content,leng,mime,name,kode) VALUES ('$files','$size','$mime','$name','$kode')";
	}
	if(mysqli_query($db,$sql)){
		echo '{"status":"success"}';
		exit;
	}
	else{
		echo mysqli_error($db);
	}
}

Ошибка возникает вот тут:
if(mysqli_query($db,$sql)){
		echo '{"status":"success"}';
		exit;
	}

а именно
if(mysqli_query($db,$sql))
Клиент получает статус 500
Вот что в логах:
PHP Warning:  mysqli_query(): MySQL server has gone away in C:\inetpub\wwwroot\ok\upload.php on line 43
PHP Warning:  mysqli_query(): Error reading result set's header in C:\inetpub\wwwroot\ok\upload.php on line 43
PHP Warning:  mysqli_query(): MySQL server has gone away in C:\inetpub\wwwroot\ok\upload.php on line 43
PHP Warning:  mysqli_query(): Error reading result set's header in C:\inetpub\wwwroot\ok\upload.php on line 43
PHP Warning:  mysqli_query(): MySQL server has gone away in C:\inetpub\wwwroot\ok\upload.php on line 43
PHP Warning:  mysqli_query(): Error reading result set's header in C:\inetpub\wwwroot\ok\upload.php on line 43

В чем может быть проблема? Я так предполагаю надо что то настроит в самом MySQL, но что?
Заранее большое спасибо!
  • Вопрос задан
  • 1538 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
@SergeyZelensky-Rostov

взято здесь
Эти ошибки будут также выдаваться при посылке серверу неверного или слишком длинного запроса. Если mysqld получает неправильный или слишком большой пакет, то сервер предполагает, что с клиентом что-то не так, и закрывает соединение. Если необходимо выполнять объемные запросы (например, при работе с большими столбцами типа BLOB), можно увеличить предельный размер запроса, запустив mysqld с опцией -O max_allowed_packet=# (по умолчанию 1 Mб). Дополнительная память выделяется по требованию, так что mysqld будет использовать больше памяти только в случае, когда выдан большой запрос или когда mysqld должен возвратить большую строку результата!
P.S.учитесь гуглить !!!
Ответ написан
@peacock
HTML/CSS, JS, PHP, JAVA, C#, Ubuntu
У меня была такая задачка: jQuery засунуть в БД для того, что бы приложение на C# работало со встроенным браузером и генерировало страницы. Так вот я засунул в БД JQuery библиотеку, используя BASE64 кодирование, на чтении - обратное преобразование. Попробуйте)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы