Обучаюсь по книге Маклафлина, сразу же стараюсь переводить все примеры на новую версию PHP. В одном из разделов книги изучается хранение в базах данных изображений, тут надо передать данные изображения в двоичной форме. В общем, смотрите код:
<html>
<head>
<link rel="stylesheet" href="/css/style.css" type="text/css">
</head>
<body>
<?php
require_once '../../scripts/app_config.php';
require_once '../../scripts/database_connection.php';
$upload_dir = HOST_WWW_ROOT . "uploads/profile_pics/";
$image_fieldname = "user_pic";
$php_errors = array(
1 => 'Превышен макс. размер файла, указанный в php.ini',
2 => 'Превышен макс. размер файла, указанный в форме HTML',
3 => 'Была отправлена только часть файла',
4 => 'Файл для отправки не был выбран'
);
$first_name = trim($_REQUEST['first_name']);
$last_name = trim($_REQUEST['last_name']);
$email = trim($_REQUEST['email']);
$bio = trim($_REQUEST['bio']);
$facebook_url = str_replace("facebook.org", "facebook.com", trim($_REQUEST['facebook_url']));
$position = strpos($facebook_url, "facebook.com");
if($position === false){
$facebook_url = "http://www.facebook.com/" . $facebook_url;
}
$twitter_handle = $_REQUEST['twitter_handle'];
$twitter_url = "http://www.twitter.com/";
$position = strpos($twitter_handle, "@");
if($position === false){
$twitter_url = $twitter_url . $twitter_handle;
} else{
$twitter_url = $twitter_url . substr($twitter_handle, $position + 1);
}
//Проверка отсутствия ошибки при отправке изображения
($_FILES[$image_fieldname]['error'] === 0)
or handle_error("сервер не может получить выбранное вами изображение.", $php_errors[$_FILES[$image_fieldname]['error']]);
/* Является ли этот файл результатом нормальной отправки? */
@is_uploaded_file($_FILES[$image_fieldname]['tmp_name']) or handle_error("вы попытались совершить безнравственный поступок. Позор!", "Запрос на отправку: файл назывался " . "'{$_FILES[$image_fieldname]['tmp_name']}'");
/* Действительно ли это изображение? */
@getimagesize($_FILES[$image_fieldname]['tmp_name']) or handle_error("вы выбрали файл для своего фото, который не является изображением. '{$_FILE[$image_fieldname]['tmp_name']}' не является файлом изображения.");
$now = time();
while(file_exists($upload_filename = $upload_dir . $now . '-' . $_FILES[$image_fieldname]['name'])){
$now++;
}
$insert_sql = sprintf("INSERT INTO users (first_name, last_name, email, bio, facebook_url, twitter_handle) VALUES ('%s', '%s', '%s', '%s', '%s', '%s');",
$mysqli->real_escape_string($first_name),
$mysqli->real_escape_string($last_name),
$mysqli->real_escape_string($email),
$mysqli->real_escape_string($bio),
$mysqli->real_escape_string($facebook_url),
$mysqli->real_escape_string($twitter_handle)
);
$mysqli->query($insert_sql) or die($mysqli->error);
$user_id = $mysqli->insert_id;
/* Вставка изображения в таблицу images */
$image = $_FILES[$image_fieldname];
$image_filename = $image['name'];
$image_info = getimagesize($image['tmp_name']);
$image_mime_type = $image_info['mime'];
$image_size = $image['size'];
$image_data = file_get_contents($image['tmp_name']);
$insert_image_sql = sprintf("INSERT INTO IMAGES (filename, mime_type, file_size, image_data) VALUES ('%s', '%s', '%d', '%s');",
$mysqli->real_escape_string($image_filename),
$mysqli->real_escape_string($image_mime_type),
$mysqli->real_escape_string($image_size),
$mysqli->real_escape_string($image_data));
$mysqli->query($insert_image_sql) or die($mysqli->error);
header("Location: show_user.php?user_id=". $user_id);
exit();
?>
</body>
</html>
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '31802', '-тут-вопросы-и-неопознанные символы-которые-лор-не-пропускает-Photoshop 3.0-и-тут-тоже' at line 1
require_once 'app_config.php';
$mysqli = new mysqli(DATABASE_HOST, DATABASE_USERNAME, DATABASE_PASSWORD, DATABASE_NAME);/* Константы из app_config */
if ($mysqli->connect_errno) {
handle_error("возникла ошибка, связанная с подключением к базе данных, содержащей нужную информацию.", $mysqli->connect_error);
}
$mysqli->set_charset("utf8");