thinkphp5访问sql2000数据库

Posted skysowe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了thinkphp5访问sql2000数据库相关的知识,希望对你有一定的参考价值。

大家都知道phpmysql是绝配,但是因为有时候工作需要,要求php访问操作sql2000,怎么办呢?

一般来说有两种方式:

1. sqlsrv驱动方式

2. odbc方式

 

sqlsrv驱动方式,因为微软公司原因,不提供sql2000的访问驱动,只提供了sql2005以上的驱动,所以如果你的数据库是2005以上版本,特别是sql2008r2,到微软官方可以下载到sql2008 for php的驱动,网上有很多文章介绍,我的博客里有篇文章 http://www.cnblogs.com/skysowe/p/5749022.html 专门讨论这个情况;

 

我工作环境是:php 5.5n(phpstudy) + nginx  + tp5.10 + sql2000 + win7(64位)系统

网上搜到了这篇文章http://www.cnblogs.com/huangtailang/p/6485528.html,测试了一下,文章里的方法是可用的:

 

(一)使用odbc方式在控制器里工作:

<?php
namespace app\\index\\controller;

use PDO;        //for pdo odbc sql2000 or sql2008r2

class Index
{
    public function index()
    {
        header(\'Content-type:text/html; charset=utf-8\');


        //////////////////////////////////////////////////////
        //test sql2000&sql2008r2 pdo
        //////////////////////////////////////////////////////

        $dbname=\'master\';
        $username=\'sa\';
        $password=\'yoooko\';

        //--------------------------------------------------------------ok
        //sql2000
        $mssqldriver = \'{SQL Server}\';
        $hostname=\'127.0.0.1\\sql2000,1434\';
        //使用ODBC方式连接
        $dbDB = new PDO("odbc:Driver=$mssqldriver;Server=$hostname;Database=$dbname", $username, $password);
        
        //--------------------------------------------------------------
        

        //--------------------------------------------------------------ok
        //sql2008r2
        //$mssqldriver = \'{SQ Server Native Client 11.0}\';
        //$mssqldriver = \'{ODBC Driver 11 for SQL Server}\';
        //$hostname=\'127.0.0.1\\sql2008r2,14333\';
        //没有安装sqlsrv驱动时无法使用,error:could not find driver
        //$dbDB = new PDO("sqlsrv:Server=$hostname;Database=$dbname", $username, $password);
        //--------------------------------------------------------------

        $sql = "SELECT * FROM cs";
        foreach ($dbDB->query($sql) as $row) {
            var_dump($row);
        }


    }



}

 

(二)使用database.php + 控制器的方式工作

在database.php里配置:

return [

    // 数据库类型
    \'type\'            => \'Sqlsrv\', //必须输入<br>

    // 用户名
    \'username\'        => \'sa\',

    // 密码
    \'password\'        => \'yoooko\',

    // 连接dsn,驱动、服务器地址和端口、数据库名称
    \'dsn\'             => \'odbc:Driver={SQL Server};Server=127.0.0.1\\sql2000,1434;Database=master\',

];

 

在Index.php控制器里:

<?php
namespace app\\index\\controller;

use think\\Db;

class Index
{
    public function index()
    {
        header(\'Content-type:text/html; charset=utf-8\');
                
        //$user = Db::table(\'cs\')->select();            //不行,有row_number()错误
        $user = Db::query("select * from cs");            //必须使用原生sql方式,正确

        echo \'<pre>\';
        print_r($user);
        echo \'</pre>\';
        }
}

 

以上是关于thinkphp5访问sql2000数据库的主要内容,如果未能解决你的问题,请参考以下文章

delete() destroy()删除数据的区别---ThinkPHP5(TP5)对数据库操作总结

两台win10装sql2000如何访问

thinkphp5 连访问数据库时报错utf-8编码错误

sql2000远程不能访问

ThinkPHP5 SQL注入(select方法)

访问 2000 - 强制转换规范 (#0) 的无效字符值 - 访问 SQL