Datenbank Abfrage von extern nur mit LIMIT 1 möglich

  • Wertes Forum,


    wir sind mit einer äußerst 'interessanten' Problematik konfrontiert, welche ich hier gern zur Diskussion stellen möchte.


    Nach Migration unseres Ticktet Systems in unser internes Netz (in welchem auch die abzufragende Starface liegt) ist nur noch eine beschränkte Abfrage der Anrufdaten aus der Starface möglich.
    Unabhängig von unserer Ticket Software, können wir das folgende Problem auch in simplen PHP-Test Scripts (auch auf der Shell) reproduzieren.


    Folgender Code führt zur Ausgabe eines Datensatzes, was bedeutet das es kein Authentifizierungsproblem auf der Starface DB sein kann.


    PHP
    [...]
    $pdo = new PDO('pgsql:host=192.168.75.8;port=5432;dbname=asterisk', 'asterisk', 'asterisk');
    $query = "SELECT * FROM cdrdata LIMIT 1";
    [...]


    Sobald wir das LIMIT größer als 1 setzen, läuft sich die Abfrage 'tot'.
    Wir haben das Script auf zwei unterschiedlichen Servern mit unterschiedlichen Konfigurationen getestet.
    Ein Fehler im Script oder der PHP-Umgebung ist damit auszuschließen.
    Auch schweigen sich die Logs auf dem Webserver und der Starface aus...


    Eine Ausführung des Query direkt auf der Starface ist problemlos möglich.



    Seid Ihr solch einer Problematik schon einmal begegnet?

  • Was heißt in diesem Zusammenhang "größer als 1". Gibt es bei "LIMIT 2" auch schon kein Ergebnis mehr?
    Die Ruflistentabelle kann sehr sehr groß werden und ein eventuelles Größenlimit sprengen.


    Die andere Möglichkeit ist, dass das PDOStatement das SELECT-Statement verpfuscht. Wird die Query tatsächlich wie oben angegeben gebaut oder mit Werte-Bindings? Siehe hierzu https://bugs.php.net/bug.php?id=44639

  • Hallo Fabian,


    vielen Dank für deine Antwort.


    Was heißt in diesem Zusammenhang "größer als 1". Gibt es bei "LIMIT 2" auch schon kein Ergebnis mehr?
    Die Ruflistentabelle kann sehr sehr groß werden und ein eventuelles Größenlimit sprengen.


    Die andere Möglichkeit ist, dass das PDOStatement das SELECT-Statement verpfuscht. Wird die Query tatsächlich wie oben angegeben gebaut oder mit Werte-Bindings? Siehe hierzu https://bugs.php.net/bug.php?id=44639


    Ich gebe kurzerhand mal das 'Testscript' zum Besten, dieses ist bewusst simpel gehalten.





    Eine Exception wird nicht geworfen.


    Das Verhalten verdient in der Tat das Prädikat 'interessant'...

  • Ohne es jetzt getestet zu haben, würde mal versuchen, anstatt $stm->fetch(...) $stm->fetchAll(...) zu verwenden, wenn mehr als eine Zeile gewünscht ist. Es sei denn, man möchte durch-iterieren. Vielleicht ist es ein Offset-Cursor-Problem.

  • Vielen Dank für deinen Tipp!


    Wir haben diesen gleich mal umgesetzt, das Ergebnis ist jedoch das gleiche.

  • Hi,


    was heißt, ihr konntet es auch auf der Shell reproduzieren? Habt ihr euer Skript auf der STARFACE (Postgres) Shell getestet?
    Wie habt ihr euch eigentlich verbunden? Der Port 5432 ist standardmäßig geschlossen.


    Die Fragen sollen helfen, dem Thema näher zu kommen.


    Viele Grüße Marco

  • Hi Marco,


    danke für deinen Beitrag.



    was heißt, ihr konntet es auch auf der Shell reproduzieren? Habt ihr euer Skript auf der STARFACE (Postgres) Shell getestet?


    Damit wollte ich anmerkten, das wir das PHP Script auch auf der Shell des Webservers ausgeführt haben - PHP CLI.


    Den Query auf der Starface Postgres direkt auszuführen ist kein Problem.


    Wie habt ihr euch eigentlich verbunden? Der Port 5432 ist standardmäßig geschlossen.


    Wir haben die folgende Info genutzt, um Remote-Zugriffe auf die Postgres-DB zu ermöglichen


    http://support.starface.de/for…=2503&viewfull=1#post2503

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!