php与mssql的ntext字段错误总结
在网上找了很久,都是说 php 读 ntext 出错的,但没发现我的页面出错,就郁闷了。后来才查到是说 php 默认最大只能读 4K 的内容,原来是我的内容超过了 4K。修改方法如
下:
1、把 php 升级到 php5 。
还好,我的已经是 php5 了。
2、调整 php.ini 的参数,把 php 默认最大只能读 4K 改大一点。
; Valid range 0 - 2147483647. Default = 4096.
;mssql.textlimit = 4096
; Valid range 0 - 2147483647. Default = 4096.
;mssql.textsize = 20480
把 mssql.textlimit 和 mssql.textsize 前面的“;“去了,再把默认值勤改大一点,比如 20480 (20K)
3、重启 web 服务器。
本以为激动人心的时刻会来临,运行 php 页面,效果还是跟以前一样,字段数据没有完全读出来。后来又找到资料说 php 对 ntext 的支持不是很友好,要转为 text。于是又用
Convert(text, content) 转了,无效果不说,还差一点把我的 iis 弄死。在网上找了很久都无解。就在我打算放弃时,一个尝试的概念让我把数据库连接方式改了一下。我把
odbc_connect 改为 mssql_connect 居然就成功了。
php 链接mssql问题 ntext不能读取
明明可以链接到数据库,却不能读取的数据。Google,百度一番之后终于知道了,原来是php读取mssql的 ntext字段反回值为空的,建议可以把ntext字段改成 text。
如果是表里面没有ntext字段,可以用以下代码:
<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy1072')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy1072>// Connect to MSSQL
$link = mssql_connect(‘KALLESPCSQLEXPRESS’, ‘sa’, ‘phpfi’);
if(!$link !mssql_select_db(‘php’, $link))
{
die(‘Unable to connect or select database!’);
}
// Do a simple query, select the version of
// MSSQL and print it.
$version = mssql_query(‘SELECT @@VERSION’);
$row = mssql_fetch_array($version);
echo $row[0];
// Clean up
mssql_free_result($version);
?》
如果表里面有ntext军字段,且不好修改回text字段, 可以如下:
1.修改 php.ini
打开php.ini
找到:
;mssql.textlimit = 4096
改为
mssql.textlimit = 2147483647
找到:
;mssql.textsize = 4096
改为
mssql.textsize = 2147483647
2.可以使用修改字段,由于sql server中,ntext和nvarchar字段是用unicode编码存储内容的,因此php通过mssql扩展读取带ntext和nvarchar类型字段的时候会抱错。
如果 title 字段类型为 nvarchar,content 字段类型为 ntext ,那么下面的sql语句会报错:
错的:
select title,content from article
正确的:
<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy2751')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy2751>select convert(varchar(255),title) as title, convert(text,content) as content from article{这个方法不太实用,如果ntext内容 太长 转换之后会丢失数据,也就说过长的文章被截断了,而且在sql2008中 把ntext改成 nvarchar(max) 也不行}
3.如果你是虚拟主机,可以使用adodb 组件来读取。如果你主机不支持,目前笔者也没办法了。
<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy7004')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy7004>include(“adodb/adodb.inc.php”); //包含adodb类库文件
$conn=NewADOConnection(‘odbc_mssql’); //连接SQL Server数据库
$conn-》Connect(“Driver={SQL Server};Server=localhost;Database=mydb;”,‘username’,‘password’);
{使用adodb有一点要注意,使用adodbPHP连MSSQL的前提是驱动问题,5.2.10之前,PHP自带的驱动只支持MSSQL 7.0,如果要支持MSSQL 2000,需要将MSSQL 2000的ntwdblib.dll(2000.80.2039.0)复制到System32或者PHP目录下
5.2.11才支持MSSQL 2000,如果需要支持MSSQL 2005和2008,需要安装微软提供的驱动
所以如果是虚拟主机基本没办法
}
?>
读取mssql的ntext字段反回空置
在测试的时候明明可以链接到数据库,但是怎么也读取不到数据。经过查找资料发现原来是php读取mssql的 ntext字段反回值为空的,建议可以把ntext字段改成 text。
如果是表里面没有ntext字段,可以用以下代码:
<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy4398')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy4398>// Connect to MSSQL
$link = mssql_connect('KALLESPCSQLEXPRESS', 'sa', 'phpfi');
if(!$link !mssql_select_db('php', $link))
{
die('Unable to connect or select database!');
}
// Do a simple query, select the version of
// MSSQL and print it.
$version = mssql_query('SELECT @@VERSION');
$row = mssql_fetch_array($version);
echo $row[0];
// Clean up
mssql_free_result($version);
?>
如果表里面有ntext军字段,且不好修改回text字段, 可以如下:
1.修改 php.ini
打开php.ini
找到:
;mssql.textlimit = 4096
改为
mssql.textlimit = 2147483647
找到:
;mssql.textsize = 4096
改为
mssql.textsize = 2147483647
2.可以使用修改字段,由于sql server中,ntext和nvarchar字段是用unicode编码存储内容的,因此php通过mssql扩展读取带ntext和nvarchar类型字段的时候会抱错。
如果 title 字段类型为 nvarchar,content 字段类型为 ntext ,那么下面的sql语句会报错:
错的:
select title,content from article
正确的:
3.如果你是虚拟主机,可以使用adodb 组件来读取。如果你主机不支持,目前笔者也没办法了。
<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy9921')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy9921>include("adodb/adodb.inc.php"); //包含adodb类库文件$conn=NewADOConnection('odbc_mssql'); //连接SQL Server数据库
$conn->Connect("Driver={SQL Server};Server=localhost;Database=mydb;",'username','password');
?>
您可能感兴趣的文章:
php与mssql的ntext字段错误总结
PHP无法读取sql server数据表
PHP utf-8和gb2312编码转换乱码的问题
mysql中char、varchar、text和nchar、nvarchar、ntext的区别
php的mssql扩展SQL查询中文字段名的解决方法
Warning: mssql_connect() [function.mssql-connect]:
MySQL(csv,text)导入mssql使用方法
Unable to connect to server:
php display_errors与log_errors
有关php连接mssql的一些总结