2016-10-31 30 views
6

Bu yazılanlar için birkaç benzer soru var. Ancak bu kodun çalışmasının bir yolunu bulamadım.SQL Server ile PHP PDO ve hazırlanmış deyimler

Özellikle ODBC'yi kullanmak için PDO kullanmak için yerel MSSQL sorgularından bir PHP codebase'i güncelleştiriyorum. İşte eski kod ve denediğim iki varyasyon.

Eski stil: İşleri, Bu beklenen bir dizi sonuç üretir. PDO ile

$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); 

kullanma T-SQL neredeyse çalışır: Ben sürece herhangi parametreleri bağlamak etmeye kalkma olarak sonuç almak.

$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); 

Çok sayıda beklenen sonuçtan oluşan bir dizi üretir. Ancak, parametreleri bağlama girişimleri, boş bir dizi olan $results'a yol açar. Hata bildirilmedi.

$sp= $db->prepare("EXEC procedure :param"); 
$sp->bindParam(':param', $param, PDO::PARAM_INT); 

Bu, boş bir sonuç kümesine yol açar ve hata bildirir.

ODBC "SQL" kullanılması hiç işe görünmüyor:

$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 boş; Parametreler olsun ya da olmasın, işe yaramıyor.

Sistem ayrıntıları: Unbodbc & freetds yüklü Ubuntu Trusty (14) üzerinde PHP 5.5.9 çalıştıran.

MSSQL ile saklı yordamları ve bağlanma parametrelerini çağıran PHP PDO'nun çalışan bir örneğini gerçekten takdir ediyorum.

+0

http: // st ackoverflow.com/a/32224294/285587? –

+0

Yardım aldıktan sonra. Şimdi $ pdo = new PDO ('odbc = connection', 'user', 'password') ile bağlantı yapıyorum; ”Ancak, adlandırılmış parametrelere bağlanma hala çalışmıyor. –

+0

Değişikliklerinizi sorgunuza göre düzenleyin, her ikisini de ilk başta neyle ilgilendiğinizi ve neye değiştiğinizi koruyun. – TallTed

cevap

3

bakın ..

$result = array(); 

$sp= $db->prepare("EXECUTE dbo.procedure :param"); 
$sp->bindParam(":param", $param, PDO::PARAM_INT); 
$sp->execute(); 

$result = $sp->fetchall(PDO::FETCH_OBJ); 
+0

Bu işe yarıyor. Ayrıca, DSN'yi dblib'den '$ pdo = yeni PDO'ya (' odbc = bağlantı ',' kullanıcı ',' şifre '); –

3

deneyin bu değişen -

$sp= $db->prepare("CALL procedure"); 

- Buna -

$sp= $db->prepare("{ CALL procedure() }"); 

bu deneyin ODBC documentation on Procedure Call Escape Sequence ve daha fazlası için PHP PDO documentation ...

+0

Tamam, bu çok yardımcı oluyor. Ben bir ODBC DSN ile bağlanabilir ve bu sözdizimi ile çağrı prosedürleri. Ancak hala çalışmak için bağlayıcı parametreleri alamıyorum. ODBC izlemeyi açtım ve bunun yarın daha fazla ipucu verip vermediğini göreceğim. –

+0

Bound parametrelerle çabalarınızı gösteren herhangi bir PHP kodu göremiyorum, bu yüzden orada herhangi bir yararlı yorum yapamam ... – TallTed

+0

Teşekkürler. Her ne kadar soruyu “bağla” yı arasanız da. Kodda bazı örnekler vardır. Muhtemelen tamamen yanlış anladım ve başka bir yolu var. –

İlgili konular