Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

PHP MSSQL procerure i foreach

[es] :: PHP :: PHP MSSQL procerure i foreach

[ Pregleda: 1107 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

sekretar
Sekretar
Naseljeno mjesto

Član broj: 37558
Poruke: 72
*.806566-67.bih.net.ba.



Profil

icon PHP MSSQL procerure i foreach16.04.2010. u 09:42 - pre 170 meseci
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
 
Odgovor na temu

sekretar
Sekretar
Naseljeno mjesto

Član broj: 37558
Poruke: 72
*.806566-67.bih.net.ba.



Profil

icon Re: PHP MSSQL procerure i foreach16.04.2010. u 11:19 - pre 170 meseci
sredio sam


ovako je trebalo da ide

mssql_bind($stmt, "@".$parametar[0], $parametri[$key], SQLVARCHAR, FALSE);
 
Odgovor na temu

[es] :: PHP :: PHP MSSQL procerure i foreach

[ Pregleda: 1107 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.