[ sekretar @ 16.04.2010. 09:42 ] @
pozdrav svima, Imam jedan prilicno cudan problem vezan za prozivanje mssql procedura. Sve procedure proziva preko jedne funkcije , ona prima ime procedure i parametre, u obliku niza. Primjer poziva jedne jednostavnije procedure je: Code: $parametri = array(); $parametri['FieldLista|SQLVARCHAR'] = " ID,Ime,Prezime "; $parametri['FilterLista|SQLVARCHAR'] = " 1 = 1 "; call_proc("_Get_korisnici_PHP",$parametri); znaci procedura koju prozivam zove se "_Get_korisnici_PHP", prima dva parametra FieldLista (SQLVARCHAR) (dodijelim vrijednost *) i FieldLista (SQLVARCHAR) (dodijelim vrijednost 1 = 1) sama procedura sluzi kao selekt iz jedne tabele, i izgleda ovako (nije ni bitna, ali eto) Code: CREATE PROCEDURE [dbo].[_Get_korisnici_PHP] @FieldLista varchar(255),@FilterLista varchar(255) AS SET NOCOUNT ON EXEC ('SELECT ' + @FieldLista + ' FROM dbo.PHP_Korisnici WHERE ' + @FilterLista + '') eh sada func... Code: function call_proc($procname,$parametri) { if(!isset($this->c)) $this->connect(); $stmt=mssql_init($procname, $this->c); foreach ($parametri as $key => $value) { //cisto da vidim jel dobro parsira parametre echo $key." => ".$value."<br>"; //razdvojim tip i naziv varijable $parametar = explode("|", $key); if($parametar[1] == "SQLVARCHAR") mssql_bind($stmt, "@".$parametar[0], $value, SQLVARCHAR, FALSE); if($parametar[1] == "SQLINT4") mssql_bind($stmt, "@".$parametar[0], $value, SQLINT4, FALSE); if($parametar[1] == "SQLTEXT") mssql_bind($stmt, "@".$parametar[0], $value, SQLTEXT, FALSE); } $result = mssql_execute($stmt); .... Procedura se ne izvrsi, padne uz error Warning: mssql_execute(): message: Invalid column name '?Uf?'. (severity 16) A u sql profileru vidim exec _Get_korisnici_PHP @FieldLista = 'üUf· ', @FilterLista = ' 1 = 1 ' Ako probam da rucno bind parametara uradim, tj ovako $val1=" ID,Ime,Prezime "; mssql_bind($stmt, "@FieldLista", $val1, SQLVARCHAR, FALSE); $val2=" 1 = 1 "; mssql_bind($stmt, "@FilterLista", $val2, SQLVARCHAR, FALSE); Onda se procedura regularno izvrsi. Ovaj problem imam samo kada se PHP vrti na Linuxu, dok na windows serveru radi bez problema. Ideje? FreeTds [MSSERVER] host = xxxxxxxxxxxxxxx port = 1433 tds version = 7.0 SQL server je 2000, ovo mi se desavalo i na 2005 |