简体   繁体   English

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

[英]windows update PDO SQL Server driver issue

I am using PHP in windows apache environment for connecting sql server using pdo. 我在Windows apache环境中使用PHP通过pdo连接sql服务器。 My code was running perfectly with out any errors. 我的代码运行良好,没有任何错误。 recent update on windows machine making pdo insert query not working. Windows计算机上的最新更新使pdo插入查询无法正常工作。 To confirm this error is not because of recent changes, I have reverted to older versions from SVN. 为了确认此错误不是由于最近的更改,我已从SVN恢复为旧版本。 Still same error exists. 仍然存在相同的错误。

error is 错误是

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

The above query returns an error 上面的查询返回错误

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 )

But, when i copy the query and run it in SQL server management studio, It runs without any error. 但是,当我复制查询并在SQL Server Management Studio中运行它时,它运行时没有任何错误。

Can anyone please help me to find out this issue? 谁能帮我找出这个问题?

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;
}

Actual function that's causing an error 导致错误的实际功能

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

Finally, I have found the issue, This is because of recent windows update on my machine and our windows server. 最终,我找到了问题,这是由于我的计算机和Windows服务器上最近的Windows更新。 After this update mssql pdo driver throws this error. 此更新后,mssql pdo驱动程序将引发此错误。 I have downloaded sqlsrv20 driver from microsoft website and placed the file 我已经从Microsoft网站下载了sqlsrv20驱动程序并放置了文件
php_pdo_sqlsrv_53_ts_vc6.dll inside php extension directory and added new extension in php.ini file like extension=php_pdo_sqlsrv_53_ts_vc6.dll and changed the pdo connectivity 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); 

Note : for wamp server users needs to check php.ini in apache also and needs to add the extension in php.ini file under apache. 注意:对于Wamp Server,用户还需要在apache中检查php.ini,并且需要在apache下的php.ini文件中添加扩展名。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM