2013-06-25 2 views
0

Я использую PHP в среде windows apache для подключения SQL-сервера с помощью pdo. Мой код работал отлично с любыми ошибками. последнее обновление на машине Windows, что делает запрос pdo insert неработоспособным. Чтобы подтвердить эту ошибку не из-за недавних изменений, я вернул старые версии из SVN. Тем не менее такая же ошибка существует.windows update PDO Ошибка сервера SQL Server

ошибка

INSERT INTO contactus(contactref, title, first_name, last_name, email) VALUES('35008679022', 'Mr', 'Robin', 'Michael', '[email protected]') 

Этот запрос возвращает ошибку

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', '[email protected]'); 
newInsertQuery('contactus', $flds, $prepVals, $valsArr); 
+0

Как вы выписываете инструкцию SQL? http://stackoverflow.com/questions/4599604/escapeing-values-in-pdo-statements –

+1

Возможный дубликат http://stackoverflow.com/questions/17270935/php-pdo-mssql-error?rq=1 –

+0

@ MarcelloRomani Спасибо за ответ. Я готовлю и выполняю значения с массивом. –

ответ

1

Наконец, я нашел этот вопрос, это из-за последнее обновление окна на моей машине и наш сервере окон. После этого обновления mssql pdo driver выдает эту ошибку. Я скачал драйвер sqlsrv20 от майкрософт сайта и поместил файл
php_pdo_sqlsrv_53_ts_vc6.dll внутри каталога расширений PHP и добавить новое расширение в файле php.ini, как расширение = 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.

Смежные вопросы