我一直在這一整天,我似乎無法弄清楚。我們的客戶希望我們將他們上傳的文件保存到我們數據庫(mssql)的表格中。目前,以什麼樣的文件,他們可以上傳所以以下的有限的知識,我有我做了一些谷歌搜索,並試圖沒有限制如下:將文件保存到varbinary(max)字段?
我創造了這個表:
CREATE TABLE files
(
id int NOT NULL PRIMARY KEY IDENTITY,
name varchar(256),
content varbinary(max) NOT NULL,
type varchar(30) NOT NULL,
size int NOT NULL
table_id INT NOT NULL FOREIGN KEY REFERENCES myTable(id)
);
然後我嘗試添加的內容是這樣的:
$newfileName = $_FILES['uploadfile']['name'];
$newtmpName = $_FILES['uploadfile']['tmp_name'];
$newfileSize = $_FILES['uploadfile']['size'];
$newfileType = $_FILES['uploadfile']['type'];
//need to get the content of the file
$fp = fopen($newtmpName, 'r');
$file_content = fread($fp, filesize($newtmpName));
$file_content = $file_content;
fclose($fp);
$sql = 'INSERT INTO files ([name], [content], [type], [size], [table_id]) VALUES ("'.$newfileName.'",CAST("'.$file_content.'" AS varbinary(max)),"'.$newfileType.'","'.$newfileSize.'","'.$table_id.'")';
,但它只是不工作......我可以上傳txt文件沒有問題,但任何東西都不會剛剛突破。我得到的錯誤,如下面的(這與每一個文件的不同):
[42000] [105] [微軟] [SQL 服務器]閉合的引號之後[ 本機客戶端10.0的SQL Server] 字符字符串' '。 [42000] [102] [Microsoft] [SQL Server Native Client 10.0] [SQL 服務器]「 」附近的語法不正確。
現在我明白這是該文件的打破了SQL內容的問題,但我有不知道如何對付它們(或如何將它們轉換成不會打破SQL字符串)。任何幫助將不勝感激,因爲我完全失去了這一點。
(是的,我知道我還沒有從攻擊保護自己這裏,但現在我只是想獲得基本工作)
您是否使用PHP的Mssql中的驅動程序或微軟的SQLSRV? – Hamish 2011-02-16 20:09:27
你爲什麼要在二進制數據上調用`addslashes()`? – drudge 2011-02-16 20:10:45
@Hamish:我正在使用sqlsrv驅動程序。 @jnpcl:這是我忘記刪除的東西(它現在不在我的代碼中)。我基本上只是在嘗試,因爲我的很多錯誤都與引號有關,所以我想看看它是否能解決問題。 – Gazillion 2011-02-16 20:15:58