0

pdoを使用してSQLサーバーに接続するために、Windows Apache環境でPHPを使用しています。私のコードはエラーなしで完全に実行されていました。pdo挿入クエリが機能しないWindowsマシンの最近の更新。このエラーが最近の変更によるものではないことを確認するために、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サーバー管理スタジオで実行すると、エラーなしで実行されます。

誰でもこの問題を見つけるのを手伝ってもらえますか?

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);
4

1 に答える 1

1

最後に、問題が見つかりました。これは、私のマシンと Windows サーバーの最近の Windows 更新が原因です。この更新の後、mssql pdo ドライバーがこのエラーをスローします。Microsoft Web サイトから sqlsrv20 ドライバーをダウンロードし、ファイル
php_pdo_sqlsrv_53_ts_vc6.dll を php 拡張ディレクトリ内に配置し、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 ファイルに拡張子を追加する必要があります。

于 2013-06-25T08:15:43.587 に答える