我正在为一个类项目组建一个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