There is a code

<?php require_once 'app_config.php'; require_once 'database_connection.php'; $first_name = trim($_REQUEST['first_name']); $last_name = trim($_REQUEST['last_name']); $email = trim($_REQUEST['email']); $bio = trim($_REQUEST['bio']); $vkontakte_url = str_replace("vk.com", "vkontakte.com", trim($_REQUEST['vkontakte_url'])); $position = strpos($vkontakte_url, "vk.com"); //Массив ошибок и переменные, связанные с изображением $upload_dir = HOST_WWW_ROOT . "uploads/profile_pics/"; $image_fieldname = "user_pic"; //Потенциальные ошибки при отправке файлов $php_errors = array(1=>'Превышен макс.размер файла указаный в php.ini', 2=>'Превышен макс. размер файла указанный в форме html', 3=>'Была отправлена только часть файла', 4=>'Файл отправки не был выбран'); if ($position === false) { $vkontakte_url = "http://www.vk.com/" . $vkontakte_url; } $twitter_handle = trim($_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("Вы попытались обмануть, за вами уже выехали" , "Запрос на отправку: файл назывался 1" . "'{$_FILES[$image_fieldname]['tmp_name']}'"); //Дейтсвительно ли это изображение? @getimagesize($_FILES[$image_fieldname]['tmp_name']) or handle_error("Вы выбрали файл для фото, который не является изображением", "{$_FILES[$image_fieldname]['tmp_name']}" . "не является файлом картинкой"); //Уникальное название файла $now = time(); while (file_exists($upload_filename = $upload_dir . $now . $_FILES[$image_fieldname]['name'])) { $now++; } //Перемещаем файл на постоянное место на сервере //@move_uploaded_file($_FILES[$image_fieldname]['tmp_name'], $upload_filename) or handle_error("Возникла проблема сохранения вашего изображения в его постоянном месте," ,"ошибка свяанная с правами доступа при перемещении файла в" . "{$upload_filename}"); ////через mysqli //$insert_sql = "INSERT INTO users (first_name, last_name, email, bio, vkontakte_url, twitter_handle) " . "VALUES ('{$first_name}', '{$last_name}', '{$email}', '{$bio}' " . // "'{$vkontakte_url}', '{$twitter_handle}');"; // //Добавить пользователя в базу данных //mysqli_query($mysql,$insert_sql) or die(mysqli_error($mysql)); //Вставка данных через PDO $STH = $DBH->prepare("INSERT INTO users ( first_name, last_name,email, bio, vkontakte_url, twitter_handle) values ( '{$first_name}', '{$last_name}', '{$email}', '{$bio}', '{$vkontakte_url}', '{$twitter_handle}' )"); $STH->execute(); //Вставка изображения в таблицу 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']); $STH = $DBH->prepare("INSERT INTO images ( filename, mime_type, file_size, image_data) values ( '{DBH->quote($image_filename)}', '{DBH->quote($image_mime_type)}', '{DBH->quote($image_size)}', '{DBH->quote($image_data)}')"); $STH->execute(); //Отправляем пользователя на свой профиль header("Location: show_user.php?user_id=" . $DBH->lastInsertId()); 

I get this error

 Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parameters' in /home/c/ch33404/testsite/public_html/test/scripts/create_user.php:80 Stack trace: #0 /home/c/ch33404/testsite/public_html/test/scripts/create_user.php(80): PDOStatement->execute() #1 {main} thrown in /home/c/ch33404/testsite/public_html/test/scripts/create_user.php on line 80 

I tried to write without a quote like this (line 80)

 $STH = $DBH->prepare("INSERT INTO images ( filename, mime_type, file_size, image_data) values ( '{DBH->quote($image_filename)}', '{$image_mime_type}', '{$image_size}', '{$image_data}')"); $STH->execute(); 

but the error is exactly the same, tell me where I am?

  • you at least read the documentation about PDO - ArchDemon

2 answers 2

In addition to the answer @Firepro. It is usually more convenient to insert parameters into execute - because it asks for an associative array at the input, which is very pleasing to the eye:

 $stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)"); $stmt->execute([':name' => 'one', ':value' => 1]); $stmt->execute([':name' => 'two', ':value' => 2]); 

It should be noted that $dbh->quote for all request parameters occurs in this case automatically.

    Example # 1 Repeated inserts into the database using prepared queries

    In this example, an INSERT query is executed 2 times with different values ​​of name and value, which are substituted for the corresponding pseudo-variables:

     <?php $stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)"); $stmt->bindParam(':name', $name); $stmt->bindParam(':value', $value); // вставим одну строку $name = 'one'; $value = 1; $stmt->execute(); // теперь другую строку с другими значениями $name = 'two'; $value = 2; $stmt->execute(); ?> 

    Official documentation