ODBC Problem

shockshell

Erfahrenes Mitglied
Hallo Leute,

ich habe in meiner Firma ein Problem mit dem Abrufen von Daten eines MsSQL Servers unter Linux mittels unixODBC/FreeTDS und AdoDB. Wenn ich mein Statement über odbc_exec ausführe erhalte ich ein Ergebnis.

PHP:
$sql='select * from ... where id=1';
odbc_exec($conn,$sql);
Führe ich das selbe Statement über odbc_execute mittels parameter binding

PHP:
$sql='select * from ... where id=?';
$params=array('1');
odbc_execute($stmt,$params);
aus erhalte ich nur ein odbc_mssql_error Fehlermeldung mit der "ID" 00000.

Unter Windows auf meinem eigenen Rechner läuft es ohne Probleme.

Hat jemand von Euch schon einmal mit sowas ähnlichem zu tun gehabt oder evtl. einen Hinweis woran es liegen könnte?

Gruß

shockshell
 
Beschreibung

int odbc_execute ( int $result_id [, array $ parameters_array ] )
Führt ein oder mehrere durch odbc_prepare() vorbereitete SQL-Befehle aus. Nach erfolgreicher Ausführung wird TRUE zurückgeliefert, sonst FALSE. Das Array parameters_array braucht nur angegeben zu werden, wenn im Befehl tatsächlich Parameter vorhanden sind.


Und hier ein beispiel:
$sth = odbc_prepare($dbh, "select from table where id = ?");
$res = odbc_execute($sth, array(1));
 
Hi,

ich habe mich zu kurz ausgedrückt. odbc_prepare wird vorher ausgeführt. In meinem Beispiel habe ich es vergessen: Also:

PHP:
$sql='select * from table where id=?';
$params=array('1');
$stmt=odbc_prepare($conn,$sql);
odbc_execute($stmt,$params);


Gruß

Shockshell

 
Hi,

also das ist der Code, der ausgeführt (adodb) wird:

PHP:
$stmtid = odbc_prepare($this->_connectionID,$sql);
if ($stmtid == false) {
    $this->_errorMsg = isset($php_errormsg) ? $php_errormsg : '';
    return false;
}
...
if (! odbc_execute($stmtid,$inputarr)) {
                //@odbc_free_result($stmtid);
                if ($this->_haserrorfunctions) {
                    $this->_errorMsg = odbc_errormsg();
                    $this->_errorCode = odbc_error();
                }
                return false;
            }
Der Prepare Aufruf liefert kein false zurück. Der Aufruf der odbc_execute Funktion liefert aber ein false. odbc_errormsg() gibt ²¿±ÿ zurück, ja ²¿±ÿ (was immer das auch heißen soll, das wechselt auch jenachdem ob und was ich vorher per echo, print_r etc. im Script ausgebe) und als errorCode 00000. Das Statement wird nicht korrekt ausgeführt (obwohl 00000 das aussagt) weil ich keine Ergebnisliste bekomme. Das gleiche Statement direkt im Management Studio ausgeführt liefert mir das gewünschte Ergebnis.

Gruß
 
Zuletzt bearbeitet:
Zurück