Windows更新PDO SQL Server驱动程序问题

时间:2013-06-25 06:00:10

标签: php sql-server-2008 pdo php-5.3

我在windows apache环境中使用PHP来连接使用pdo的sql server。 我的代码运行完美,没有任何错误。最近更新的Windows机器使pdo插入查询无法正常工作。要确认此错误不是因为最近的更改,我已从SVN恢复为旧版本。仍然存在相同的错误。

错误是

INSERT INTO contactus(contactref, title, first_name, last_name, email) VALUES('35008679022', 'Mr', 'Robin', 'Michael', 'robin@robin.com')

以上查询返回错误

Array ( [0] => HY000 [1] => 10007 [2] => Incorrect syntax near '35008679022[10007] (severity 5) [INSERT INTO contactus(contactref, title, first_name, last_name, email) VALUES('Mr] [3] => -1 [4] => 5 )

但是,当我复制查询并在SQL Server管理工作室中运行它时,它运行时没有任何错误。

有人可以帮我找一下这个问题吗?

function newInsertQuery( $tbl, $flds, $prepVals, $valsArr ) {
    try {
        $dbcon = $this->mysqlConnect();
        $q = "INSERT INTO $tbl($flds) VALUES($prepVals)";
        $prep = $dbcon->prepare($q);
        if( $prep->execute($valsArr) ) {
            $rq = 1;
            $q = "SELECT SCOPE_IDENTITY() as ins_id";
            $rq = $dbcon->query($q);
            $optArr = $rq->fetchAll(PDO::FETCH_ASSOC);
            $_SESSION['last_id'] = $optArr[0]['ins_id'];
        }
        else {
            $rq = 0;
        }

        $_SESSION['q_error'] = $dbcon->errorInfo();
    }
    catch( Exception $ex ) {
        $rq = 0;
        echo $ex->getMessage();
    }

    //clear connection
    $dbcon = null;
    return $rq;
}

导致错误的实际功能

$flds = 'contactref, title, first_name, last_name, email'; 
$prepVals = '?, ?, ?, ?, ?'; 
$valsArr = array('35008679022', 'Mr', 'Robin', 'Michael', 'robin@robin.com');
newInsertQuery('contactus', $flds, $prepVals, $valsArr);

1 个答案:

答案 0 :(得分:1)

最后,我发现了这个问题,这是因为最近我的机器和Windows服务器上的Windows更新。在此更新后,mssql pdo驱动程序抛出此错误。我从microsoft网站下载了sqlsrv20驱动程序,并将文件放在文件中     php扩展目录下的php_pdo_sqlsrv_53_ts_vc6.dll并在php.ini文件中添加了新的扩展名,如extension = php_pdo_sqlsrv_53_ts_vc6.dll并更改了pdo连接

$dbcon = new PDO( "sqlsrv:server=$conf->host;Database=$conf->db_name", $conf->db_user, $conf->db_pwd); 

注意:对于wamp服务器用户,还需要在apache中检查php.ini,并需要在apache下的php.ini文件中添加扩展名。