我正在使用Codeigniter中的一個進程來獲取用戶上傳的圖像(使用CI上傳庫進行管理)並將其插入SQLServer數據庫中的varbinary(max)字段。我的控制器和型號代碼如下。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()'已經正確地轉義了查詢的值。你是雙重逃脫。 – 2013-02-13 18:14:44
@crypticツ嘿......這是我試圖弄清楚如何使它工作的一個遺留問題。我最初只用escape()。我更新了代碼以刪除該代碼。 – rosalindwills 2013-02-13 18:16:01
'echo $ stmt;'顯示什麼?哪條線是213線? – 2013-02-13 18:20:35