在研究ezSQL的时候就看到了mssql_connect()等一些php提供的连接MSSQL的函数,本以为php这个开源的风靡世界的编程语言对连接微软的数据应该是不在话下的,但是到真正执行的时候,才发现困难多多。
一开始我下载的php版本是5.93的,下载下来添加环境变量等等搞了半天后,phpinfo()这个函数终于成功的运行在浏览器中了。然后当我在满世界的找php_mssql.dll,才发现在5.3以及以上版本的php中已经不是原生态的支持mssql了。
好不容易找到了微软Microsoft Drivers 3.0 for PHP for SQL Server,心想微软的东西应该做的可以,却无奈的发现SQLSRV30.EXE没有办法运行:“SQLSRV30.EXE 不是有效的win32程序”。
在网上搜索了半天,总结了以下一些可行的办法,但是在这之前你需要:
配置MICROSOFT SQL SERVER
1、下载并安装sql server。现在这个版本就比较多了从2000 到2008不等,找一个你自己下载吧。
2、开放tcp/ip连接方式,使得数据库能够远程访问。SQL Server Configuration Manager -> Network Configuration -> Protocols -> TCP/IP enabled
3、打开数据管理界面,添加用户和数据库。
4、安装php和配置IIS服务。
5、打开php所在文件夹里面的 php.ini文件,并添加:
mssql.textlimit = 20971520
mssql.textsize = 20971520
做完了这些之后,你可以按照下面三种方法来连接数据库了:
使用php自带的方法连接MSSQL(5.3及以后版本不适用)
确保php ext扩展库文件夹下有php_mssql.dll,然后在PHP.ini中的配置中,将
;extension=php_mssql.dll
前面的“;”去掉。
然后你可以测试连接了:
Microsoft Drivers for SQL Server for PHP
2008年7月微软发布了一个新的为php连接SQL Server的驱动,它改善了php自带的连接MSSQL函数的一些缺点,并且是以php扩展插件的形式开发的,通过它你可以用php轻松的读写微软的数据库了。
如果你服务器使用的是IIS的话,那么就一定要从这里去下载:
http://php.iis.net/
因为从上述链接进去其实是微软整合的网络开发平台,只提供在线安装,但是很方便的整合了PDO插件和php,当然还有微软的其它一些开发功能,但是如果你没需要,你可以不装了,那些是在visual studio中的。
但是如果你用的是 Apache的话,你可以去这里直接下载这个插件了,它其实是一个解压文件,解压出来几个DLL文件,具体操作如下:
1)下载驱动包:http://www.microsoft.com/en-us/download/details.aspx?id=20098.
2)将DLL文件解压到 PHP extension_dir 目录,如果出现说SQLSRV30.EXE 不是有效的win32程序,可能是缺少某些库,可能是vc10,也有可能是没有用administrator权限运行。
extension_dir = “C:\PHP\ext”
3)在php.ini配置文件内引用相应的动态链接库文件
extension=php_sqlsrv_52_ts_vc6.dll
extension=php_pdo_sqlsrv_52_ts_vc6.dll
extension=php_pdo.dll
其中的52、53表示就是php的5.2.x和5.3.x 版本,选择跟你php版本相匹配的;
选择vc6或vc9的主要看你使用的是什么web服务器软件,如果使用的是IIS那就选择vc9的,如果是Apache则选择vc6的。
至于ts和nts,就要看你安装的php版本是线程安全版的还是非线程安全版,ts是线程安全,nts是非线程安全。
4)重启Apache
5)连接数据库
测试连接代码:
经过几次搜索之后终于找到了办法。
解决步骤如下:
1.下载下面连接的文件至go-pear.phar。
http://pear.php.net/go-pear.phar
2.执行php go-pear.phar
(Windows上执行的时候因为有UAC的问题所以需要以管理员权限运行CMD。
以管理员权限运行CMD的方法。
创建CMD.bat文件-〉该文件中只有一条语句:CMD-〉右键以管理员身份运行该BAT文件即可)
3.一路Enter
安装完毕,大功告成!
更详细的信息可以到pear的网站上获得
http://pear.php.net/manual/en/installation.getting.php
本文链接
位运算:
一、先求出二进制:
-3原码: 10000000 00000000 00000000 00000011
-3反码: 11111111 11111111 11111111 11111100 //取反,但符号位不变。
-3补码: 11111111 11111111 11111111 11111101 //反码加1
注意:
1、正数的原码、反码、补码都是一样的。
2、计算机运算是以补码形式进行的,故计算是,先统一转成补码,计算后(补码)逆转成原码。
二、按位与& :除去符号位,同1为1,逻辑与同理。
例:-3&2
-3 补码:11111111 11111111 11111111 11111101
2 补码:00000000 00000000 00000000 00000010
结果补码:00000000 00000000 00000000 00000000//最高位也参与运算,因为一正一负,总得有个了断吧
结果:0,由于正数三码统一,故处已是结果,补码即原码。
例:-3&-6
-3 补码:11111111 11111111 11111111 11111101
-6 补码:11111111 11111111 11111111 11111010
结果补码:11111111 11111111 11111111 11111000
结果反码:11111111 11111111 11111111 11110111//补码-1
结果原码:10000000 00000000 00000000 00001000 //反码再求反之后,-8
总结:
1、有正为正。
2、在结果为负,并且左边全是1,右边全是0,则结果从最后一个 1 取到最后,即:11111000 => 1000 => 8 => -8
2、当一个负数是2^n时,它的补码:补码等于原码有效数字所位,前补1,后补0。
-8 => 1 <1> 000 => 11000 //当然,前面还可以补许多1,但没意义,只要位数够运算就行
-2 => 1 <1> 00 => 11100
11000
11100
11000//结果补码,结果便是:1000 => 8 取负,-8
三、按位或| :除去符号位,有1为1
例:-3|-6
-3 补码:11111101
-6 补码:11111010
结果补码:11111111
结果反码:11111110//补码-1
结果原码:00000001 //反码再求反,-1
总结:
1、有负为负。
四、按位异或^ :相异为1,相同为0
例:-3^-6
-3 补码:11111101
-6 补码:11111010
结果补码:00000111//已然为正,故为7
总结:同号为正,异号为负。
五、按位取反~ :0、1互换
例:~-3
-3 补码:11111101
结果补码:00000010//已然为正,故为2
总结:正负相换。
六、按位右移>> : 排除符号位,二进制数整体向右移动。
7 >> 2 => 0111 => 0001 = 1 // 这里向右移动了2位,最低位的两个1被抹去。
七、按位左移<< : 与上同理。
7 << 2 => 0111 => 011100 = 28 // 这里向右移动了2位,最低位的两个1被抹去。
总结:右移两位等于除了2的二次方,7/4 = 1 在整数除法中则看成是被舍掉了小数部分。左移就是剩以2的二次方,PHP没有无符号右移运算符>>>
本文链接