首先是百度到的解决方案:

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目录中就可以了.

了解了,原来如此,由此确定我是少安装了一些组件导致的。

Tags: ,
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);
Tags: ,
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']}”;
?>
加上花括号{}可以让语句识别这里面是动态的。

Tags:
Posted in PHP at September 3rd, 2009. 1 Comment.

以前的程序是把图片通过ASP以二进制的格式存储到MSSQLSERVER中的,现在需要用PHP把它显示出来,

  1. $id = $_GET['id'];
  2.     $conn = dbo_connect();
  3.     $query = "select f.Data from Files f,Products p where p.PhotoSN=f.SN and p.ID=$id";
  4.     $result = mssql_query($query, $conn);
  5.     if (mssql_num_rows($result)) {
  6.         $row = mssql_fetch_assoc($result);
  7.         if (!empty($row['Data'])) {
  8.             echo $row['Data'];
  9.         }
  10.     }
  11.     mssql_close($conn);

但是读取出来的图片都只有开头一小部分,其它部分是空白,全选以后看到的图片大小似乎也是正常的,就是有一部分显示不出来,好一个纳闷。质量高的图片显示的部分还要小,质量低的或者图片尺寸小的就要显示的多一些,看样子是读取的数据大小是一致的。后来一看$row['Data']的长度,果然清一色的4096,原来如此。
上网查资料,费了好大劲,才看到一句有价值的话“是配置错了”。配置错了?难道PHP读取MSSQL的image数据还有大小限制?赶紧打开php.ini,搜索image,没有相关的,搜索4096,还没有相关的,不会吧?!哈哈,原来是已经搜索到文件末尾,还在向下搜索,难怪没有。赶紧改方向,找到了!但是无关,再搜,OK,终于找到了:

  1. ; Valid range 0 - 2147483647Default = 4096.
  2. ;mssql.textlimit = 4096
  3.  
  4. ; Valid range 0 - 2147483647Default = 4096.
  5. ;mssql.textsize = 4096

原来如此,把mssql.textlimit和mssql.textsize后面的值都改成最大,2147483647,然后再把前面的分号去掉,保存,重启IIS。再去看刚才的程序显示出来的图片,成了,全部显示!
真亲啊!GOOD!

Tags: ,
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…

Tags: , ,
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.