Я работаю над процессом в Codeigniter, чтобы загрузить загруженное пользователем изображение (управляемое с помощью библиотеки загрузки CI) и вставить его в поле varbinary (max) в базе данных SQLServer. Мой контроллер и код модели выглядят следующим образом.Ошибка недопустимого номера параметра в Codeigniter
if($this->upload->do_upload($upload_name)) {
//get temp image
$tmpName = $config['upload_path'] . $config['file_name'];
// Read it into $data variable
$fp = fopen($tmpName, 'rb');
$data = fread($fp, filesize($tmpName));
fclose($fp);
//insert into DB
$this->the_model->storeImage($data, $user_id);
//delete temp image
unlink($config['upload_path'] . $config['file_name']);
}
/***** Function from the_model ************/
function storePropertyImage($image_data, $user_id) {
$my_db = $this->load->database('admin');
$stmt = "INSERT INTO my_table (UserID, ImageData) VALUES (" . $my_db->escape($user_id) . ", " . $my_db->escape($image_data) . ")";
$insert = $my_db->query($stmt);
return $insert;
}
Это все кажется, что это должно быть в порядке, но когда я запускаю код, я получаю ошибку:
Fatal error: Uncaught exception 'PDOException' with message
'SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parameters'
in {my app path}\helpers\mssql_helper.php on line 213
я сделал некоторые погуглите на это сообщение об ошибке, и результаты, кажется, указывают это результат наличия символа двоеточия в значении $ data, отправляемого в модель, что делает БД считающим, что я пытаюсь передать именованный параметр, когда я этого не делаю. Однако я не смог найти отчеты, соответствующие моему конкретному варианту использования, или которые имеют много информации о том, как исправить ошибку.
Буду признателен, если бы я мог споткнуться.
Почему вы делаете это 'addslashes ($ image_data)'? '$ my_db-> escape()' уже правильно удалит значение для запроса. Вы избегаете двойного побега. –
@cryptic ツ Хе-хе ... это наследие моего возиться с этим, пытаясь понять, как заставить его работать; Сначала я имел его с побегом(). Я обновил код, чтобы удалить его. – rosalindwills
Что делает 'echo $ stmt;' show? Какая строка - строка 213? –