Я использую PHP в среде windows apache для подключения SQL-сервера с помощью pdo. Мой код работал отлично с любыми ошибками. последнее обновление на машине Windows, что делает запрос pdo insert неработоспособным. Чтобы подтвердить эту ошибку не из-за недавних изменений, я вернул старые версии из 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);
Наконец, я нашел проблему, это из-за недавнего обновления Windows на моем компьютере и на нашем сервере Windows. После этого обновления mssql pdo driver выдает эту ошибку. Я загрузил драйвер sqlsrv20 с сайта microsoft и поместил файл
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 необходимо также проверить php.ini в apache и добавить расширение в файл php.ini под apache.