Я использую 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);
Как вы выписываете инструкцию SQL? http://stackoverflow.com/questions/4599604/escapeing-values-in-pdo-statements –
Возможный дубликат http://stackoverflow.com/questions/17270935/php-pdo-mssql-error?rq=1 –
@ MarcelloRomani Спасибо за ответ. Я готовлю и выполняю значения с массивом. –