最近帮别人忙将一个在 Linux 上的 PHP + MySQL 的小系统移植到 Windows 上,PHP 不变,数据库改用 SQL Server ,整个移植过程挺简单。
1、环境
- 在 Windows 上安装 PHP ,注意要将 PHP\sessiondata 的目录设置为 IUSR_Machine 用户可写
- 在 IIS 中建立 PHP 的虚拟站点,如果是 IIS 6.0,新增加一个 PHP 的 CGI 扩展并启用之
- 修改 PHP.ini ,使 PHP 可以连接 SQL Server,extension=php_mssql.dll,并更改 session.save_path (Linux 上一般是 /tmp,Windows 上是 C:\PHP\sessiondata)
- 在 Windows 上安装 MySQL、MySQL Control Center(可选)、MySQL ODBC Connector。
2、数据库
- 将 MySQL 的数据备份文件恢复
- 在 SQL Server 中新建 DB,并使用 DTS 将 MySQL 的 DB 导入
- 可以还要做少许设置,将一些未能导入的设置还原,如 Key、Index、Auto Increment 列等
- 在新数据库建立专门的 PHP 访问登录用户
3、应用
- 将 MySQL 的数据库连接参数改成 MS SQL Server ,参数都差不多,无非 Server、DB Name、UserName 和 Password 等;
- 将所有 PHP 页面中的 mysql_XXX 函数替换成 mssql_XXX 函数,唯一不同的是没有 mssql_error 这个函数;
- MySQL 的 SQL 中可以用 “’” 来加在表名的两端,这在 SQL Server 中是非法的,将其替换成空(替换成 [ ] 也可以,但太麻烦);
- MySQL 的 SQL 中使用 LIMIT m,n (从 m 条开始取 n 条记录)来实现分页,SQL Server 中没有这样的功能,只能使用 TOP 和子查询来实现了
如 SELECT * FROM Orders ORDER BY ID DESC LIMIT 10,5 ,可以变成:
SELECT TOP 5 *
FROM ( SELECT TOP 5 *
FROM ( SELECT TOP 10+5 *
FROM Orders
ORDER BY ID DESC ) Temp1
ORDER BY ID ASC ) Temp2
ORDER BY ID DESC之所以用这么复杂的 SQL ,是为了保证只取出有限行的数据,并且排序保护不变,不过效率未知
- 将一些 SQL 的关键字予以处理,在 MySQL 中,User、Size、Language、Top 等都可以使用,但要在 SQL Server 的 T-SQL 中使用,则必须要在两边加 [ ] 了。
基本上就改这么一些东西,如有必要,再更改一下默认首页的名称,就可以完全正常使用了。
小系统还好,大一点工作量都很XX。。。
这种方法去数据效率真的有点值得怀疑。
转换到SqlServer
数据量不大的话
可以取出数据
配合
mssql_data_seek()分页
还有
可以在php中可以调用SqlServer存储过程实现分页
如果服务器上
只运行php的话 可以考虑用Apache跑
iis跑php用cgi模式的话
进程内会经常多出好多php.exe
用ispi跑那也快不了多少
或者apache和iis各用各的端口
还有换到sqlserver有一个需要重视的问题
就是 “注入”
因为sqlserver可以同时执行多条sql语句。
有没有更先进的方法呢!
关注!