phpbar.de logo

Mailinglisten-Archive

[php] INSERT, UPDATE, DELETE Querys in einer Socketverbindung gehen nicht

[php] INSERT, UPDATE, DELETE Querys in einer Socketverbindung gehen nicht

Andi Voss andi at andis.mine.nu
Die Jun 21 14:23:48 CEST 2005


Hallo,

ich hab ein komisches Problem und weiss nicht mehr weiter:
Hab einen PHP-CLI TCP/IP-Server und nen Clienten. Schicke von dem 
Clienten (ebenfalls CLI) komplette SQL-Querys in Textform zum Server und 
dieser soll diese dann ausführen.
Mit SELECT-Statements klappt das auch wunderbar - bekomme immer die 
korrekten Ergebnisse.
Aber sobald ich INSERT,UPDATE,DELETE-Statements habe, werden diese zwar 
ausgeführt, es kommt auch keine Fehlermeldung, aber in der DB hat sich 
nix geändert.!?
Das ist ne Firebirddatenbank auf einem Linux-Rechner. ibase_errmsg() 
wirft nix aus und echo ibase_query() gibt true bzw. 1 aus.
Wenn ich genau den gleichen Query durch ein anderes Test-Skript 
ausführen lasse, funktioniert es einwandfrei und die Daten sind in der 
DB entsprechend geändert.
Die Datenbankverbindung ist identisch (kopiert und nicht geändert).

define( "host", "localhost" );
define( "user", "SYSDBA" );
define( "pass", "xxxx" );
define( "charset", "WIN1252" );
/* absoluter Pfad zur Datenbank */
$db = $host . ':/opt/interbase/data/euro.GDB';
ibase_pconnect( $db,$user,$pass,$charset );

Ein Rechteproblem kann es nicht sein, da das andere Skript, welches 
nicht in dem TCP/IP-Server hängt, die Aktion richtig durchführt.

Es handelt sich um ganz banale Aktionen wie zum Beispiel:
INSERT INTO UPDATE_DEF (id,artikelnr) values 
(GEN_ID(andi_gen,1),'MULTIPLO2S')

GEN_ID() ist eine Funktion von Firebird, die ein autoincrement darstellt.

Der folgende Code:
-------- code ---------
echo "SQL: '" . $buf . "'\n";
$query = ibase_query( $buf );
echo ibase_errmsg();

if( FALSE == $query )
{
   echo "false\n";
}
else
{
   echo "erfolg\n";
}
echo "Query: '" . $query . "'\n";
-------- code ---------

ergibt diese Ausgabe auf der Konsole des Servers:
--------- ausgabe ----------
SQL: 'INSERT INTO UPDATE_DEF (id,artikelnr) values 
(GEN_ID(andi_gen,1),'MULTIPLO2S')'
erfolg
Query: '1'
--------- ausgabe ----------

aber die Daten in der DB sind nicht geändert worden.

Ich habe testweise schonmal den SQL-String in eine Datei geschrieben und 
diese dann wieder ausgelesen, um das Statement auf diese Art zu 
verwenden, aber ohne Erfolg bzw. gleiches Ergebnis.

Hat da jemand Erfahrung mit so einem Problem oder weiss woran das liegen 
könnte?

Danke schonmal
Gruss Andi

php::bar PHP Wiki   -   Listenarchive