shangkou.com 上口

读也上口,吃也上口! www.shangkou.com

轻松学些MYSQL数据库——MYSQL帐户管理(GRANT和REVOKE语法二)

mysql> SELECT Host, User FROM mysql.user WHERE User=”; 如果您想要删除本地匿名用户账户,以避免出现刚才谈到的问题,则需使用以下语句: mysql> DELETE FROM mysql.user WHERE Host=’localhost’ AND User=”; mysql> FLUSH PRIVILEGES; GRANT支持最长为60个字符的hostnames。数据库、表、列和子程序名称最长可为64个字符。Usernames最长可为16个字符。 注释:不能通过更改mysql.user表来改变usernames的允许长度。如果试图这么做,会导致出现不可预见的问题,可能会造成用户无法登录MySQL服务器。除了采用由MySQL公司提供的用于升级MySQL服务器的mysql_fix_privilege_tables原稿之外,请您不要以任何方式变更授权表。 对于表或列的权限是作为各个权限层级的逻辑OR权限被附加形成的。例如,如果mysql.user表指定一个用户拥有全局SELECT权限,则该权限不能被数据库、表或列层级的登录项定义。 可以按下列方法计算列权限: global privileges OR (database privileges AND host privileges) OR table privileges OR column privileges 在多数情况下,您只在一个权限层级下向用户授予权利,所以寿命通常不是那么复杂。有关权限检查规程的细节,请参见5.7节,“MySQL访问权限系统”。 如果您对一个在mysql.user表中不存在的username/hostname组合授予权限,则增加一个登录项并保持在此处,直到使用DELETE语句删除为止。换句话说,GRANT可以创建用户表登录项,但是REVOKE不会取消它们;您必须使用DROP USER或DELETE明确地操作。 如果创建了一个新的用户,或者如果您拥有全局授权权限,则用户密码被设置为由IDENTIFIED BY子句指定的密码(如果给定了一个)。如果用户已拥有了一个密码,则此密码被新密码替代。 警告:如果您创建了一个新用户,但是不指定IDENTIFIED BY子句,则用户没有 密码。这是很不安全的。不过,您可以启用NO_AUTO_CREATE_USER SQL模式,来防止GRANT创建一个新用户(否则GRANT会这么做),除非给定了IDENTIFIED BY来为新用户提供一个密码。 使用SET PASSWORD语句也可以设置密码。请参见13.5.1.5节,“SET PASSWORD语法”。 在IDENTIFIED BY子句中,密码应被作为文字密码只被给定。没有必要使用PASSWORD()函数,因为该函数用于SET PASSWORD语句。例如: GRANT … IDENTIFIED BY ‘mypass’; 如果您不想以明白的文字发送密码,并且您知道PASSWORD()返回给密码的混编值,则您可以指定混编值,前面加入关键词PASSWORD: GRANT … IDENTIFIED BY PASSWORD ‘*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4′; 在一个C程序中,您可以通过使用make_scrambled_password() C API函数得到混编值。 如果您为一个数据库授予权限,则在mysql.db表中,会根据需要创建登录项。如果使用REVOKE删除了所有的数据库权限,则本登录项被删除。 如果一个用户不拥有表权限,则当用户申请表清单时(例如,使用SHOW TABLES语句),表名称不显示。 SHOW DATABASES权限允许账户通过发布SHOW DATABASE语句来观看数据名称。不拥有此权限的账户只能看到他们拥有部分权限的数据库,并且如果使用–skip-show-database选项启动服务器,则根本不能使用本语句。 WITH GRANT OPTION子句给予用户能力,可以在指定的权限层级,向其它用户给定其拥有的任何权限。您应该留心您给予了谁GRANT OPTION权限,因为拥有不同权限的两个用户可以联合使用权限! 您不能向其它用户授予您自己没有的权限;GRANT OPTION权限只允许您赋予您自己拥有的权限。 要注意,当您在某个特定权限层级向一个用户授予GRANT OPTION权限时,用户拥有的该层级的任何权限(或未来将被给定的权限)也可以由该用户授予。假设您向一个用户赋予了数据库INSERT权限。如果您然后赋予数据库SELECT权限,并指定了WITH GRANT OPTION,则该用户不仅可以向其它用户给予SELECT权限,还可以给予INSERT。如果您然后向用户授予数据库UPDATE权限,则用户可以授予INSERT, SELECT和UPDATE。 您不应该向一个常规用户授予ALTER权限。如果您这么做,则该用户可以尝试通过对表重新命名来破坏授权系统! The MAX_QUERIES_PER_HOUR count, MAX_UPDATES_PER_HOUR count, and MAX_CONNECTIONS_PER_HOUR count options limit the number of queries, updates, and logins a user can perform during any given one-hour period. If count is 0 (the default), this means that there is no limitation for that user. MAX_QUERIES_PER_HOUR count, MAX_UPDATES_PER_HOUR count和MAX_CONNECTIONS_PER_HOUR count选项限制了在任何给定的一小时期间,用户可以执行的查询、更新和登录的数目。如果count是0(默认值),这意味着,对该用户没有限制。 MAX_USER_CONNECTIONS count选项限制了账户可以同时进行的连接的最大数目。如果count是0(默认值),则max_user_connections系统可以决定该账户同时连接的数目。 注释:要对一个原有的用户指定任何这类资源限制型选项,同时又不影响原有的权限,需使用GRANT USAGE ON *.* … WITH MAX_…。 见5.8.4节,“限制账户资源”。 除了根据username和密码进行常规鉴定外,MySQL还可以检查X509证明属性。要为MySQL账户指定与SSL有关的选项,需使用GRANT语句的REQUIRE子句。(要了解有关在MySQL中使用SSL的背景信息,请参见5.8.7节,“使用安全连接”。) 对于一个给定的账户,有多种可能性可以限制连接类型: · 如果账户没有SSL或X509要求,并且如果username和密码是有效的,则允许不加密连接。但是,如果客户端有正确的证明和关键文件,则根据客户端的选择,也可以使用加密连接。 · REQUIRE SSL选项用于告知服务器,对于该账户只允许SSL加密连接。注意,如果有允许任何非SSL连接的访问控制记录,则本选项可以被忽略。 · mysql> GRANT ALL PRIVILEGES ON test.* TO ‘root’@'localhost’ · -> IDENTIFIED BY ‘goodsecret’ REQUIRE SSL; · REQUIRE X509意味着客户端必须拥有一个有效证明,除非不需要确切的证明、发布者和主题。唯一的要求是,应可以使用CA证明其中之一来验证签名。 · mysql> GRANT ALL PRIVILEGES ON test.* TO ‘root’@'localhost’ · -> IDENTIFIED BY ‘goodsecret’ REQUIRE X509; · REQUIRE ISSUER ‘issuer’用于对连接尝试进行限定,客户端必须出示一个由CA’issuer’发布的有效的X509证明。如果客户端出示的证明是有效的,但是有一个不同的发布者,则服务器会拒绝连接。使用X509证明就意味着要加密,所以在这种情况下,SSL选项是不必要的。 · mysql> GRANT ALL PRIVILEGES ON test.* TO ‘root’@'localhost’ · -> IDENTIFIED BY ‘goodsecret’ · -> REQUIRE ISSUER ‘/C=FI/ST=Some-State/L=Helsinki/ · O=MySQL Finland AB/CN=Tonu Samuel/Email=tonu@example.com’; 注意,ISSUER值应被作为一个单一字符串输入。 · REQUIRE SUBJECT ‘subject’用于对连接尝试进行限定,客户端必须出示一个包含主题subject的有效的X509证明。如果客户端出示的证明是有效的,但是有一个不同的主题,则服务器会拒绝连接。 · mysql> GRANT ALL PRIVILEGES ON test.* TO ‘root’@'localhost’ · -> IDENTIFIED BY ‘goodsecret’ · -> REQUIRE SUBJECT ‘/C=EE/ST=Some-State/L=Tallinn/ · O=MySQL demo client certificate/ · CN=Tonu Samuel/Email=tonu@example.com’; 注意,SUBJECT值应被作为一个单一字符串输入。 · 需要REQUIRE CIPHER ‘cipher’来确认使用了密码和足够长度的关键字。如果使用了采用短型加密关键字的旧算法,SSL本身会比较脆弱。使用本选项,您可以要求使用特定的密码方法来许可一个连接。 · mysql> GRANT ALL PRIVILEGES ON test.* TO ‘root’@'localhost’ · -> IDENTIFIED BY ‘goodsecret’ · -> REQUIRE CIPHER ‘EDH-RSA-DES-CBC3-SHA’; SUBJECT, ISSUER和CIPHER选项可以在REQUIRE子句中结合,如下: mysql> GRANT ALL PRIVILEGES ON test.* TO ‘root’@'localhost’ -> IDENTIFIED BY ‘goodsecret’ -> REQUIRE SUBJECT ‘/C=EE/ST=Some-State/L=Tallinn/ O=MySQL demo client certificate/ CN=Tonu Samuel/Email=tonu@example.com’ -> AND ISSUER ‘/C=FI/ST=Some-State/L=Helsinki/ O=MySQL Finland AB/CN=Tonu Samuel/Email=tonu@example.com’ -> AND CIPHER ‘EDH-RSA-DES-CBC3-SHA’; 注意,SUBJECT和ISSUER值各自应被作为一个单一字符串输入。 在REQUIRE各选项之间,AND关键词是自选的。 选项的顺序无所谓,但是选项不能被指定两次。 当mysqld启动后,所有的权限被读入存储器中。要了解详细说明,请参见5.7.7节,“权限更改何时生效”。 注意,如果您正在使用表权限或列权限,即使只对一个用户使用,服务器也会对所有用户检查表权限和列权限,这会略微降低MySQL的速度。与此类似,如果您对某些用户限制查询、更新或连接的数目,则服务器必须监测这些值。 标准SQL版本和MySQL版本的GRANT之间的最大区别是: · 在MySQL中,权限与hostname和username的组合有关,与单一的username无关。 · 标准SQL不拥有全局层级或数据库层级权限,也不支持MySQL支持的所有权限类型。 · MySQL不支持标准SQL TRIGGER或UNDER权限。 · 标准SQL权限以一种分等级的方式进行组织。如果您取消一个用户,则用户被授予的所有权限都被撤销。在MySQL中,如果您使用DROP USER,也会如此。请参见13.5.1.2节,“DROP USER语法”。 · 在标准SQL中,当您取消一个表时,对一个表的所有权限会被撤销。在标准SQL中,当您撤销一个权限时,根据该权限被授予的所有权限也会被撤销。在MySQL中,只有使用明确的REVOKE语句,或通过操作存储在MySQL授权表中的值,才能取消权限。 · 在MySQL中,可以只对一个表中的部分列拥有INSERT权限。在此情况下,如果您忽略您不拥有INSERT权限的那些列,,您仍然可以对表执行INSERT语句。如果没有启用严格的SQL模式,则被忽略的列被设置为各自隐含的默认值。在严格模式下,如果某个被忽略的列没有默认值,则该语句被拒绝。5.3.2节,“SQL服务器模式”对严格模式进行了讨论。13.1.5节,“CREATE TABLE语法”对隐含默认值进行了讨论。 您不拥有INSERT权限的列被设置为各自的默认值。标准SQL要求您拥有所有列的INSERT权限。 在MySQL中,如果您只拥有一个表中的部分列的INSERT权限,同时,如果您从INSERT语句中忽略您不拥有权限的列,则您仍然可以对表执行INSERT语句;那些列将被设置为各自的默认值。在严格模式下(即当sql_mode=’traditional’时,如果某些被忽略的列没有默认值,则INSERT语句将被拒绝。

原文转自:http://hi.baidu.com/%CC%EC%C0%B6_bluesky/blog/item/ec04f0df67a2613e5882dd7f.html

php5.3.8+配置Apache+MySQL+phpMyAdmin+zendOptimizer+xdebug

找了很久这个教程写的不错的,共享出来供大家学习

http://blog.csdn.net/rainysia/article/details/6740875

1: 下载php5.3.8 for windows.

说明一下,官网的windows版本有2种,

上面是非线程安全的VC9 x86 Non Thread Safe , 缺少了php5apache2_2.dll 这些文件, 大小是14.93M .

下面那个Thread Safe线程安全版的.才是我们需要的,大小是15.06M

猛击这里下载php5.3.8 for windows VC9 X86

至于VC6和VC9,一个支持apache一个支持IIS.但是试了下VC9用在apache上没问题 .

线程安全Thread Safe(TS)和非线程安全(NTS),就是在执行时是否进行线程安全检查,以防止有新要求就启动新建成的CGI执行方式,进而耗尽系统资源.

执行方式有ISAPI和FastCGI,

前者ISAPI(Internet Server Application Programming Interface)是以DLL动态链接库的形式使用,在用户请求后执行,在处理完一个用户请求后不会马上消失,因此需要进行线程安全检查.以此来提高程序的执行效率. 所以以ISAPI的方式来执行PHP,最好选择Thread Safe版本也就是我们下载的版本,对应的apache的设置在第4段末尾有. 

FastCGI是以单一线程执行,所以不需要进行线程安全检查,因为没有了线程安全检查,反而加快了PHP的执行效率.所以如果用FastCGI来执行PHP,最好选择Not Thread Safe版本 .而在apache中就需要设置成下面的.(这里我们配置的环境不用设置)

view plainScriptAlias /php/ “F:/php/PHP5″  
Action application/x-httpd-php “/php/php-cgi.exe” 

2: 解压后,以前的php.ini是由php.ini-dist文件转变过来的

  php5.3.8里面这个文件变成了php.ini-development

php.ini-development 意味着是开发版本的配置. 

php.ini-production 是网站发布时的配置.

这里我们用开发版php.ini-development  修改成php.ini后 打开. 

3: 下面修改php.ini的配置  我的php5.3.8是放在了F:/php/php5 文件夹下面

修改下面的为以下内容() 

view plainshort_open_tag = On                 短标签<?  ?>开启  
asp_tags = On                       asp的短标签<*  *>开启  
register_globals = off              超级全局变量,建议关闭,打开它会造成安全上的漏洞  
post_max_size= 8M                   POST提交时候的最大数据提交量  
magic_quotes_gpc = off              php自带的安全验证,建议开启  
file_uploads = On                   php支持文件上传  
upload_max_filesize = 2M            文件上传最大值 2M   
max_file_uploads = 20               同时并发上传的最大文件数   

找到extension_dir 和下面很多的 extension= ****.dll 这里

在extension=****.dll 的前面加上这一段来配置php的动态链接库地址 此处修改 extension_dir=” \ “  为下边设置, 

view plainextension_dir=”F:\php\php5\ext”   路径根据自己的安装目录修改 

去掉以下的extension前面的分号 ;  使其开启 

view plainextension=php_bz2.dll  
extension=php_curl.dll  
  
extension=php_gd2.dll  
extension=php_gettext.dll  
  
extension=php_mbstring.dll  
extension=php_mysql.dll  
extension=php_mysqli.dll  
  
extension=php_openssl.dll  
extension=php_pdo_mysql.dll  
  
extension=php_sockets.dll  
  
extension=php_xmlrpc.dll  

找到data.timezone 
设置时区为中国时区

view plaindate.timezone = prc  

保存php.ini 并且复制一份到C:\windows 下 

4: 让Apahce支持php. (Apache的安装很简单,这里省略下)

打开.\apache2.2\conf\httpd.conf

在大约60行的位置添加 

view plainPHPIniDir “F:/php/php5″    路径根据自己的安装目录修改
注意一定要添加在LoadModule 那一段的前面,以便提前加载,不然稍后的phpMyAdmin容易出错.  

在LoadModule这段后面添加 

view plainLoadModule php5_module “F:/php/php5/php5apache2_2.dll”  
apache的htdocs重写这里就省略下. ( T _ T 刚才都要写完了,没保存掉chromium假死了下,然后就白写了…) 
在大约380行Addtype那里加入 

view plainAddType application/x-httpd-php .php .php5 .php4 .php3 .phtml .phpt  
AddType application/x-httpd-php-source .phps  

5: 重启Apache

这时候弹出找不到php_curl.dll 和php_openssl.dll

可是我们路径都指定了的,解决办法

复制php5文件夹下面的

libeay32.dll, ssleay32.dll, php5ts.dll,

 php5/ext文件夹下面的

php_curl.dll,php_openssl.dll

复制到C:/windows/system32 里面.

重启apache 

6: 测试phpinfo和mysqlConn.

老版本的php是有一个libmysql.dll文件的,新版的libmysql.dll这个文件已经移交给了MySQL的开发团队,所以大家不用费心去找这个文件了.它就在MySQL安装目录的lib文件夹下. 复制一份到C:/windows/system32即可
在你的apache指定的www目录下新建一个phpinfo()文件.输入

view plain<?php  
echo phpinfo();  
?>  

打开浏览器输入http://127.0.0.1/phpinfo.php 得到php的信息
新建一个mysqlconn.php文件.输入

view plain<?php  
    $conn=mysql_connect(“localhost”,”root”,”123456″) or die (“mysql_error()”);  
    if(!$conn) echo “Failed!”;  
    else echo “Successful!”;  
    print_r ($conn);  
    mysql_close();  
?  
打开浏览器输入http://127.0.0.1/mysqlconn.php

得到 Successful! 表明数据库链接成功

7:安装phpMyAdmin3.4.0

解压下来后把phpmyadmin放入www目录

找到phpmyadmin文件夹里的/libraries/config.default.php
修改以下内容 

view plain$cfg['PmaAbsoluteUri']  = ‘http://localhost/phpmyadmin/’;  
$cfg['Servers'][$i]['host'] = ‘localhost’;  
$cfg['Servers'][$i]['auth_type'] = ‘config’;           //如果是网络上则需要改成cookie  
$cfg['blowfish_secret'] = ”;       //此项只有当上面修改为cookie后,这里必须修改,内容自定,比如你的域名比如www.yourdomain.com       
$cfg['Servers'][$i]['user'] = ‘root’;             //登录账户  
$cfg['Servers'][$i]['password'] = ’123456′;       //密码  
$cfg['DefaultLang'] = ‘zh’;                //这是默认语言为中文.  
$cfg['DefaultCharset'] = ‘utf8′;        //这是修改编码方式,可以修改成gb2312.  

浏览器打开http://127.0.0.1/phpmyadmin 输入帐号密码进入 

8:phpMyAdmin的出错解决:

a: 无法载入mcrypt扩展,请检查PHP配置

        这个问题首先查看mysql是否开始.如果开启了,把php里面的 libmcrypt.dll 复制一份到windows/system32下. 并且检查php.ini文件里面extension=php_mcrypt.dll是否开启.

如果都不行,检查系统环境变量,在我的电脑 右键 属性, 高级 环境变量 里面的 系统变量 Path里面加入你的php安装路径 ;F:\php\php5  注意有分号隔开

b:如果phpMyAdmin登录出现下面的错误.Themysqliextension is missing

The mysqli extension is missing. Please check your PHP configuration. <a href=”Documentation.html#faqmysql” target=”documentation”><img src=”./themes/original/img/b_help.png” width=”11″ height=”11″ alt=”Documentation” title=”Documentation” /></a>

复制php/ext/php_mysqli.dll 到windows/system32 后,即可进入

9:  zendOptimizer,xdebug,WinCacheGrind加速调试的安装:
zend加速器安装很简单.exe文件,直接双击就行了.WinCacheGrind也是一样.地址就不贴了,大家辛苦搜下.

这里只说下xdebug的安装.

首先打开

http://127.0.0.1/phpinfo.php
 
再打开http://xdebug.org/find-binary.php 
然后,把phpinfo.php解析后的内容ctrl+A,ctrl+c复制,然后ctrl+v粘贴在http://xdebug.org/find-binary.php 这个里面

接着点 屏幕左下的那个.

然后会给出你你需要操作的步骤.

第一个是你需要下载的xdebug版本.下载后复制到你的php/ext 里面去.改名不改名无所谓.

然后在php.ini里面添加下面提示的那个地址.比如我在我的php.ini添加上

view plain[Xdebug]  
zend_extension=”F:\php\php5\ext\php_xdebug.dll”  
xdebug.auto_trace=On  
xdebug.collect_params=On  
xdebug.collect_return=On  
xdebug.profiler_enable=on  
xdebug.trace_output_dir=”F:\php\php5\xdebug”  
xdebug.profiler_output_dir=”F:\php\php5\xdebug”  

这里唯一需要注意的是,xdebug的输入路径必须要真实存在,它不会自己建的.所以需要提前建好.如果你下下来没改名,那么我上面的那个挂载文件就需要改成没改名的文件.

这些操作完了,复制一份新的php.ini去windows目录,然后打开cmd.exe输入

view plainnet stop apache2.2 <span style=”font-size:13px;”>  
net start apache2.2 </span>  

来重启apache.然后就可以在phpinfo的最开始看见zendOptimizer和xdebug加载提示了.

[转载]工作总结之PHP连接Microsoft SQL Server 2000/2005/2008

最近由于工作需要用于SQL Server,想做一个测试环境,SQL Server 2008不是刚出来,图个新鲜,就下载了2008版的,用了很多方法一直没能连接上SQL Server 2008。在网上找了一些资料,终于连接上了SQL Server 2008,整理了一下收集到的资料,利用中午休息时间,写个贴子发出来,让大家看看。呵呵!!

 PHP自带的MSSQL扩展php_mssql.dll原来是给SQL Server 2000用的,难怪连接不上2008?! -_-!!要使用SQL Server 2005以上版本,就要用到微软为PHP提供的最新第三方扩展SQL Server Driver for PHP才行,最新版本是2.0的,下载地址:

 SQL Server Driver for PHP 1.1 (2009-10)

http://www.microsoft.com/downloads/details.aspx?familyid=CCDF728B-1EA0-48A8-A84A-5052214CAAD9&displaylang=en

SQL Server Driver for PHP 2.0 CTP1(2010-04)

http://www.microsoft.com/downloads/details.aspx?familyid=DF4D9CC9-459C-4D75-A503-AE3FCEB85860&displaylang=en

或者:http://www.microsoft.com/sqlserver/2005/en/us/PHP-Driver.aspx

想看中文详细使用资料可参考MSDN的,地址:

http://msdn.microsoft.com/zh-cn/library/cc296170(SQL.90).aspx

先来复习一下怎么样用PHP自带的扩展php_mssql.dll连接SQL Server 2000,用mssql系列函数来操作,和操作MySQL的一样。

1、打开PHP配置文件php.ini,找到;extension=php_mssql.dll把前面的分号去掉。

2、找到mssql.secure_connection = Off修改成 mssql.secure_connection = On。

3、把PHP文件夹下的php_mssql.dll和ntwdblib.DLL这两个文件拷贝到C:\windows\system32\文件夹下。

4、重启Apache,OK

 

测试一下:

 

 

  1. <?php
  2. //用mssql_connect
  3. $conn=mssql_connect(‘localhost’,'pandao’,’1987′) or die(‘数据库连接不上’);
  4. mssql_select_db(‘test’,$conn);
  5. //query语句
  6. $Query=”select * from news”;
  7. $AdminResult=mssql_query($Query);
  8. //输出结果
  9. $Num=mssql_num_rows($AdminResult);
  10. for($i=0;$i<$Num;$i++)
  11. {
  12. $Row=mssql_fetch_array($AdminResult);
  13. echo($Row[1]);
  14. echo(“<br/>”);
  15. }
  16. ?>

复制代码

 

当然还可以用pdo和ODBC来连接SQL Server。

准备工作

下载驱动程序,我下载的是2.0的,下载后安装释放程序,里面有以下文件:

php_pdo_sqlsrv_52_nts.dll

php_pdo_sqlsrv_52_ts.dll

php_pdo_sqlsrv_53_nts_vc6.dll

php_pdo_sqlsrv_53_nts_vc9.dll

php_pdo_sqlsrv_53_ts_vc6.dll

php_pdo_sqlsrv_53_ts_vc9.dll

php_sqlsrv_52_nts.dll

php_sqlsrv_52_ts.dll

php_sqlsrv_53_nts_vc6.dll

php_sqlsrv_53_nts_vc9.dll

php_sqlsrv_53_ts_vc6.dll

php_sqlsrv_53_ts_vc9.dll

SQLServerDriverForPHP.chm(手册,英文够好的话,可以看看,嘿嘿)

SQLServerDriverForPHP_License.rtf

SQLServerDriverForPHP_Readme.htm(自述文件

 

下面是自述文件里的内容,我翻译一下:

 

 

驱动程序文件 PHP 版本 线程安全性 用于PHP .dll
php_sqlsrv_53_nts_vc6.dllphp_pdo_sqlsrv_53_nts_vc6.dll 5.3 no php5.dll
php_sqlsrv_53_nts_vc9.dllphp_pdo_sqlsrv_53_nts_vc9.dll 5.3 no php5.dll
php_sqlsrv_53_ts_vc6.dllphp_pdo_sqlsrv_53_ts_vc6.dll 5.3 yes php5ts.dll
php_sqlsrv_53_ts_vc9.dllphp_pdo_sqlsrv_53_ts_vc9.dll 5.3 yes php5ts.dll
php_sqlsrv_52_nts.dllphp_pdo_sqlsrv_52_nts.dll 5.2 no php5.dll
php_sqlsrv_52_ts.dllphp_pdo_sqlsrv_52_ts.dll 5.2 yes php5ts.dll

关于VC6和VC9的区别,还有非线程安全与线程安全

 

VC6 版本是使用 Visual Studio 6 编译器编译的,如果你是在windows下使用Apache+PHP的,请选择VC6版本。

VC9 版本是使用 Visual Studio 2008 编译器编译的,如果你是在windows下使用IIS+PHP的,请选择VC9版本。

Non Thread Safe就是非线程安全,在执行时不进行线程(Thread)安全检查;

Thread Safe 是线程安全,执行时会进行线程(Thread)安全检查,以防止有新要求就启动新线程的 CGI 执行方式而耗尽系统资源;

开始配置

我用的是APMserv 搭建的PHP环境(Apache 2.2.9+PHP 5.2.6+MySQL 5.1.28),想用线程安全的,所以选择php_sqlsrv_52_ts.dll和php_pdo_sqlsrv_52_ts.dll。

开始工作,先把文件拷贝到PHP文件夹下的ext目录下,然后在配置文件php.ini
Extensions后面加上:

;extension=php_sqlsrv_52_ts.dll

;extension=php_pdo_sqlsrv_52_ts.dll

再重启Apache。

最后测试一下是否成功,看一下phpinfo的sqlsrv 

如图所示这样就表示连接成功了!!开始工作喽!

 

连接数据库

 

使用过SQL Server的人应该都清楚,SQL Server常用的有两种认证方式,一种是本地系统账户认证(Windows Authentication ),一种是使用用户名和密码(SQL Server Authentication ),第二种认证方式必须启用SQL Server的混合模式。

 

1.Windows Authentication连接部分代码段

 

 

  1. <?php
  2. $serverName = “(local)”;
  3. $connectionInfo = array(“Database”=>”test”,”ConnectionPooling”=>false);
  4. $conn = sqlsrv_connect( $serverName, $connectionInfo);
  5. if( $conn == false)
  6. {
  7.     echo “连接失败!”;
  8.     die( print_r( sqlsrv_errors(), true));
  9. }
  10. ?>

复制代码

 

 

2.SQL Server Authentication连接部分代码段

 

 

  1. <?php
  2. $serverName = “(local)”; //数据库服务器地址
  3. $uid = “pandao”; //数据库用户名
  4. $pwd = “1987″; //数据库密码
  5. $connectionInfo = array(“UID”=>$uid, “PWD”=>$pwd, “Database”=>”test”);
  6. $conn = sqlsrv_connect( $serverName, $connectionInfo);
  7. if( $conn == false)
  8. {
  9.     echo “连接失败!”;
  10.     die( print_r( sqlsrv_errors(), true));
  11. }
  12. $query = sqlsrv_query($conn, “SELECT TOP 10 nid,title,content FROM test.dbo.news”);
  13. while($row = sqlsrv_fetch_array($query)){
  14.     echo $row['nid'].”—–”.$row['title'].”<br/>”;
  15. }
  16. ?>

复制代码

 

 

由于我电脑没装SQL Server 2005,所以没有测试,SQL Server Driver for PHP是给2005和2008用的,应该是一样的,大家在时间可以测试一下,看是不是一样。

微软为PHP新增加了操作SQL Server 2005/2008的函数sqlsrv系列,下面是sqlsrv API,用法跟操作MySQL的基本一样,可以参考学习一下。

在PHPchina混了N久了,还是第一次在PHPchina发原创贴,在下文笔不行,写得不好,欢迎大家拍砖!

相关参考文章:

微软提供给PHP5的SQL Server扩展: sqlsrv (转载)

PHP连接SQL Server 2005 和 SQL Server 2008

API 参考 (SQL Server Driver for PHP)

用于 SQL Server Driver for PHP 的 API 名称是 sqlsrv。所有 sqlsrv函数都以 sqlsrv_打头,后跟动词或名词。后跟动词的函数用于执行特定操作,而后跟名词的函数用于返回特定形式的元数据。

SQL Server Driver for PHP 包含以下函数:

 

 

函数 说明
sqlsrv_begin_transaction 开始事务。
sqlsrv_cancel 取消语句;并放弃相应语句的所有未决结果。
sqlsrv_client_info 提供有关客户端的信息。
sqlsrv_close 关闭连接。释放与相应连接关联的所有资源。
sqlsrv_commit 提交事务。
sqlsrv_configure 更改错误处理和日志记录配置。
sqlsrv_connect 创建一个连接,并将其打开。
sqlsrv_errors 返回关于上一操作的错误和/或警告信息。
sqlsrv_execute 执行预定义语句。
sqlsrv_fetch 使下一行的数据可供读取。
sqlsrv_fetch_array 以数值索引数组、关联数组或这两种数组的形式检索下一行的数据。
sqlsrv_fetch_object 以对象形式检索下一行的数据。
sqlsrv_field_metadata 返回字段元数据。
sqlsrv_free_stmt 关闭语句。释放与相应语句关联的所有资源。
sqlsrv_get_config 返回指定配置设置的值。
sqlsrv_get_field 按索引检索当前行中的字段。可以指定 PHP 返回类型。
sqlsrv_has_rows 检测结果集是否具有一行或多行。
sqlsrv_next_result 使下一结果可供处理。
sqlsrv_num_rows 报告结果集中的行数。
sqlsrv_num_fields 检索活动结果集中的字段数。
sqlsrv_prepare 准备 Transact-SQL 查询,但不执行该查询。隐式绑定参数。
sqlsrv_query 准备 Transact-SQL 查询,并将其执行。
sqlsrv_rollback 回滚事务。
sqlsrv_rows_affected 返回有所修改的行的数目。
sqlsrv_send_stream_data 在每次调用函数时向服务器发送最多八千字节 (8 KB) 的数据。
sqlsrv_server_info 提供有关服务器的信息。

 

 

另可参考 PHP手册

 

概念

 

SQLSRV 常量

 

其他资源

 

SQL Server Driver for PHP 介绍
     编程指南

入门

PS:经测试这个扩展支持 MSSQL 2000/2005/2008全系列,这样完全可以不用PHP原来自带的php_mssql.dll了,而且最新的PHP5.3也没带php_mssql.dll了 2010-06-28