首先是百度到的解决方案:
1.首先确认php.ini中的extensions的extension=php_mssql.dll前的分号已经去掉。
2.通过phpmyadmin确认此版本的php支持mssql函数。
3.如果 仍不能使用mssql_connect()函数,则将你的php目录下的ntwdblib.DLL文件拷贝到c:\windows\system32目录下。
4.若还不行,右键查看ntwdblib.DLL文件的版本,将其替换为最新的版本 2000.80.194.0 。
==========华丽分割线===============
我遇到的情况是:刚刚重新安装了mssql2005,是自定义安装,去掉了某些功能,问题就来了,估计是某个组件没能安装上,导致怎么也连接不了。上面的方法,第1个没有问题,我查看多少遍了。第2个方法也试过了,不过没找到在哪里查看:D。第3个方法试过以后,成了,但是不知道ntwdblib.DLL是个什么东东,一搜,原来是:
NTwdblib.dll是SQL SERVER客户端连接库, 你在SQL SERVER机器的WINNT\SYSTEM32下找到它,把它拷贝到你的客户端机器的SYSTEM32目录中就可以了.
了解了,原来如此,由此确定我是少安装了一些组件导致的。
Posted in
mssql at January 28th, 2010.
No Comments.
先用函数base64_encode() — 使用 MIME base64 对数据进行编码
标题字符串前加编码类型例如: =?UTF-8?B?
标题字符串后加:?=
邮件header指明Content-type: text/html; charset=utf-8,这样就能防止邮件正文乱码
$to = ‘zhoz@example.com’;
$subject = “=?UTF-8?B?”.base64_encode(‘邮件标题’).”?=”;
$headers = ‘MIME-Version: 1.0′ . “\r\n”;
$headers .= ‘Content-type: text/html; charset=utf-8′ . “\r\n”;
// Additional headers
$headers .= ‘To: zhoz <zhoz@example.com>’ . “\r\n”;
$headers .= ‘From: Admin <admin@example.com>’ . “\r\n”;
$headers .= ‘Reply-To: zhoz <zhoz@example>’ . “\r\n”;
mail($to, $subject, $message, $headers);
Posted in
PHP at December 30th, 2009.
2 Comments.
当看到错误提示
syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
这个提示,是提示变量使用的问题。
而我出现的是,语句中使用了数组,导致失败。下面看看失败的代码;
<?php
echo “我是数组,$n['x']“;
?>
这样即时双引号是可以解析变量的,但是素组这样的,写法是没办法解析。修改成下面就可以了!
<?php
echo “我是数组,{$n['x']}”;
?>
加上花括号{}可以让语句识别这里面是动态的。
Posted in
PHP at September 3rd, 2009.
1 Comment.
以前的程序是把图片通过ASP以二进制的格式存储到MSSQLSERVER中的,现在需要用PHP把它显示出来,
- $id = $_GET['id'];
- $conn = dbo_connect();
- $query = "select f.Data from Files f,Products p where p.PhotoSN=f.SN and p.ID=$id";
- $result = mssql_query($query, $conn);
- if (mssql_num_rows($result)) {
- $row = mssql_fetch_assoc($result);
- if (!empty($row['Data'])) {
- echo $row['Data'];
- }
- }
- mssql_close($conn);
但是读取出来的图片都只有开头一小部分,其它部分是空白,全选以后看到的图片大小似乎也是正常的,就是有一部分显示不出来,好一个纳闷。质量高的图片显示的部分还要小,质量低的或者图片尺寸小的就要显示的多一些,看样子是读取的数据大小是一致的。后来一看$row['Data']的长度,果然清一色的4096,原来如此。
上网查资料,费了好大劲,才看到一句有价值的话“是配置错了”。配置错了?难道PHP读取MSSQL的image数据还有大小限制?赶紧打开php.ini,搜索image,没有相关的,搜索4096,还没有相关的,不会吧?!哈哈,原来是已经搜索到文件末尾,还在向下搜索,难怪没有。赶紧改方向,找到了!但是无关,再搜,OK,终于找到了:
- ; Valid range 0 - 2147483647. Default = 4096.
- ;mssql.textlimit = 4096
-
- ; Valid range 0 - 2147483647. Default = 4096.
- ;mssql.textsize = 4096
原来如此,把mssql.textlimit和mssql.textsize后面的值都改成最大,2147483647,然后再把前面的分号去掉,保存,重启IIS。再去看刚才的程序显示出来的图片,成了,全部显示!
真亲啊!GOOD!
Posted in
keyboard's joy at October 29th, 2008.
No Comments.
mssql默认以系统时间格式输出,你可以调整系统的时间格式来解决
当然是在程序里解决比较灵活,例如:
“select convert(char,日期字段,120) as date2 from table”
convert(char,date,N)输出的各中样式
N 日期样式
0 04 2 2005 9:06AM
1 04/02/05
2 05.04.02
3 02/04/05
4 02.04.05
Read More…
Posted in
keyboard's joy at September 9th, 2008.
No Comments.
【1】页面之间无法传递变量 get,post,session在最新的php版本中自动全局变量是关闭的,所以要从上一页面取得提交过来得变量要使用$_GET['foo'],$_POST['foo'],$_SESSION['foo']来得到
当然也可以修改自动全局变量为开(php.ini改为register_globals = On);考虑到兼容性,还是强迫自己熟悉新的写法比较好。
【2】Win32下apache2 用get方法传递中文参数会出错
test.php?a=你好&b=你也好
传递参数是会导致一个内部错误
解决办法:”test.php?a=”.urlencode(你好).”&b=”.urlencode(你也好)
………….
【3】win32下的session不能正常工作
php.ini默认的session.save_path = /tmp
这显然是linux下的配置,win32下php无法读写session文件导致session无法使用
把它改成一个绝对路径就可以了,例如session.save_path = c:\windows\temp Read More…
Posted in
PHP at April 23rd, 2008.
No Comments.