PHP使用ODBC连接SQL Server数据库和读写代码封装函数

时间:2022-06-25 19:47:29

PHP使用ODBC连接SQL Server数据库和读写代码封装函数


db_sqlserver.php 稍为改下连接参数就可以拿去用了 ^_^


<?php
/**
 * db_sqlserver.php
 * Author: RoadToTheExpert
 */

/**
 * db_con
 *
 * 创建SqlServer连接。
 * 使用ODBC连接方式,需要到微软官网下载sqlserver for php相关驱动并重启。
 * 注意驱动版本和x86,64位类型,在php.ini 开启 odbc 扩展。
 * sqlserver与php在同一台机器同一个系统下容易连接成功。Linux没作测试。
 *
 * 执行此函数可以检测驱动是否安装成功。
 * 使用时,相关参数需要更改为你实际使用的数据库对应的参数。
 */
function db_con()
{
    $server = '192.168.0.1';
    $username = 'sa'; //数据库用户名
    $password = 'xxx';   //数据库密码
    $database = 'db_xxx';     //数据库
    $con_url = "Driver={SQL Server};Server=$server;Database=$database";
    //define ...
    $con = odbc_connect($con_url, $username, $password, SQL_CUR_USE_ODBC);
    if ($con)
        return $con;
    return null;
}

/**
 * db_query
 * 执行select语句,返回二维数组(不含字段),参考test.php。
 */
function db_query($sql, $fieldcount)
{
    $con = db_con();
    if (is_null($con))
        return null;

    $rs = odbc_exec($con, $sql);

    if( $rs === false) {
        //echo 'sql error : ' . $sql;
        //exit;
    }

    $table = [];

    if( $rs === false || odbc_num_rows($rs) == 0 ) {
        return $table;
    }

    while (odbc_fetch_row($rs)) {
        $row = [];
        $n = 0;
        while( $n < $fieldcount ) {
            $row[] = odbc_result($rs, ++$n);
        }
        $table[] = $row;
    }

    if( count($table) > 0  ) {
        odbc_free_result($rs);
    }

    odbc_close($con);

    return $table;
}

/**
 * odbc_exec
 * 执行insert,update或delete语句。
 * 如果执行不成功,调整一下数据库参数和odbc_connect参数。
 */
function db_exec($sql)
{
    $con = db_con();
    if (is_null($con))
        return null;
    $dat = odbc_exec($con, $sql);
    odbc_close($con);
    return $dat;
}


test.php
<?php

require_once 'db_sqlserver.php';

function test() {
    $sql = 'select name, account, age  from user';
    $rs = db_query($sql, 3);


    foreach($rs as $r) {
        foreach($r as $c ) {
            echo $c."\t";
        }
        echo PHP_EOL;
    }

    $sql = "insert into user(name, account, age) values('myname', 'my_account', 18)";
    $rs = db_exec($sql, 3);
    var_dump($rs);
}

test();