Существует ряд подобных вопросов, которые уже были отправлены. Однако я не нашел способ заставить этот код работать.PHP PDO с SQL Server и подготовленные операторы
Я обновляю PHP-базу данных из собственных запросов MSSQL для использования PDO, в частности, для использования ODBC. Вот старый код и два варианта, которые я пробовал.
Old style: Works, Это дает массив ожидаемых результатов.
$db = mssql_connect('connection', 'user', 'password');
mssql_select_db('database', $db);
$sp = mssql_init('procedure', $db);
$param=1;
$results=[];
mssql_bind($sp,'@param',$param,SQLINT4,FALSE,FALSE);
$spRes = mssql_execute($sp);
while ($row = mssql_fetch_array($spRes, MSSQL_ASSOC)) $results[] = $row;
mssql_free_statement($sp);
var_dump(results);
Использование T-SQL с PDO почти работает: Я получаю результаты до тех пор, пока я не пытаюсь связывать какие-либо параметры.
$pdo = new PDO($'dblib:host=connection', 'user', 'password');
$pdo->query('use database');
$sp= $db->prepare("EXEC procedure");
$sp->execute();
while ($row = $sp->fetch(PDO::FETCH_BOUND)) $results[] = $row;
$sp->closeCursor();
var_dump(results);
Производит множество ожидаемых результатов. Однако любая попытка связывания параметров приводит к тому, что $results
является пустым массивом. Ошибок не сообщается.
$sp= $db->prepare("EXEC procedure :param");
$sp->bindParam(':param', $param, PDO::PARAM_INT);
Это приводит к пустующему набору результатов и не сообщает об ошибках.
Использование ODBC "SQL", кажется, не работает вообще:
$pdo = new PDO($'dblib:host=connection', 'user', 'password');
$pdo->query('use database');
$sp= $db->prepare("CALL procedure");
$sp->execute();
while ($row = $sp->fetch(PDO::FETCH_BOUND)) $results[] = $row;
$sp->closeCursor();
var_dump(results);
$results
пуст; с параметрами или без них, похоже, не работает.
Сведения о системе: Запуск PHP 5.5.9 на Ubuntu Trusty (14) с установленным unixodbc & freetds.
Я очень благодарен за рабочий пример PHP PDO, вызывающего хранимые процедуры и параметры привязки с MSSQL.
http: // st ackoverflow.com/a/32224294/285587? –
После некоторой помощи. Я теперь подключаюсь к '$ pdo = new PDO ('odbc = connection', 'user', 'password');' Однако привязка к указанным параметрам все еще не работает. –
Лучше всего изменить свои изменения в своем вопросе, оптимально сохранив как то, с чего вы начали, так и то, что вы изменили. – TallTed