我正在爲一個類項目組建一個PHP網站,我們正在使用MS SQL Server 2008數據庫來填充網站上的字段。但是,其中一個字段是將垃圾輸出到頁面上,而不是實際存儲在數據庫中的內容。使用PHP的odbc獲取varchar(max)列
有問題的字段,稱爲description
,是varchar(MAX)
字段;存儲過程在數據庫中查詢元組並將其表中的值轉儲到頁面上的文本框中; description
字段被輸出到textarea
控件。
這裏是處理從數據庫中提取信息的PHP:
$res = odbc_exec($dbhandle, "exec dbo.usp_ProgramGet " . $_GET["program"]);
$id = $_GET["program"];
$name = odbc_result($res, "title");
$desc = odbc_result($res, "description");
像預期的那樣$name
可變作品(在數據庫中,這是char(15)
類型)。但是,如果(例如)description
字段包含「這是一個測試」,那麼$desc
將導致「 $ime 」,它將被轉儲到textarea
控件中,而不是存儲在數據庫中的內容。
我已經遍尋搜索,發現這個問題還沒有解決方案,但它聽起來像一個PHP本身的錯誤,雖然我不確定。
更新
我使用SQL服務器查詢來更新VARCHAR值。我試圖把在一個很長的字符串,我得到這個:
�,ime�������stringDayToInt��É������à‰,���N={���������������������������������������������
「stringDayToInt」是我寫的一個PHP函數的名稱,生活在一個完全不同的文件,該文件得到了納入我想出來的頁面。非常奇怪。
一般評論 - 總是最好通過$ _GET/$ _POST過濾/清理任何輸入。直接傳遞給DB引擎可能是不安全的,這取決於你的prog的使用上下文。 – trickwallett 2011-02-10 16:49:07
@trickwallett - 是的,這絕對是一個很好的建議。對於這個項目來說幸運的是,由於應用程序的範圍和一般性質,我們並不需要擔心。 – 2011-02-10 17:02:50