Istnieje wiele podobnych pytań do tego już opublikowany. Jednak nie znalazłem sposobu na uruchomienie tego kodu.PHP PDO z SQL Server i przygotowane oświadczenia
Aktualizuję kod PHP z natywnych zapytań MSSQL, aby używać PDO, w szczególności do korzystania z ODBC. Oto stary kod i dwie odmiany, które próbowałem.
Stary styl: Działa, to daje szereg oczekiwanych wyników.
$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);
Korzystanie z T-SQL z PDO prawie działa: mam wyniki, tak długo jak nie próbować wiązać żadnych parametrów.
$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);
Tworzy tablicę wielu oczekiwanych wyników. Jednak każda próba związania parametrów prowadzi do tego, że $results
jest pustą tablicą. Nie zgłoszono błędów.
$sp= $db->prepare("EXEC procedure :param");
$sp->bindParam(':param', $param, PDO::PARAM_INT);
Prowadzi to do pustego zestawu wyników i nie zgłasza błędów.
Korzystanie ODBC "SQL" nie wydają się działać na wszystkich:
$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
jest pusta; z parametrami lub bez, nie działa.
Szczegóły systemu: Uruchamianie PHP 5.5.9 na Ubuntu Trusty (14) z zainstalowanymi unixodbc & freetds.
Naprawdę doceniłbym działający przykład PHP PDO wywoływania procedur składowanych i parametrów wiązania z MSSQL.
http: // st ackoverflow.com/a/32224294/285587? –
Po uzyskaniu pomocy. Łączę się teraz z '$ pdo = new PDO ('odbc = connection', 'user', 'password');' Jednak powiązanie z nazwanymi parametrami nadal nie działa. –
Najlepiej edytować zmiany w swoim pytaniu, optymalnie zachowując zarówno to, co zacząłeś, jak i to, na co się zmieniłeś. – TallTed