AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte MySQL via PHP-Tunnel (über eigene libmysql.dll)

MySQL via PHP-Tunnel (über eigene libmysql.dll)

Ein Thema von omata · begonnen am 22. Feb 2010 · letzter Beitrag vom 25. Mai 2015
Antwort Antwort
StefanKortenhaus

Registriert seit: 27. Mai 2010
1 Beiträge
 
#1

AW: MySQL via PHP-Tunnel (über eigene libmysql.dll)

  Alt 24. Mai 2011, 11:01
Danke! Funktioniert astrein mit Delphi 2006 und der Zeos Komponente (6.6.6-stable)
Der Knackpunkt war bei mir, in der sqltunnel.php in der Zeile 252

Code:
$DB = new DbClass('localhost');
das localhost mit der wirklichen IP des Servers zu ersetzen, da der Server wohl kein localhost mag..

Great work!
  Mit Zitat antworten Zitat
teosuper

Registriert seit: 23. Nov 2008
11 Beiträge
 
#2

AW: MySQL via PHP-Tunnel (über eigene libmysql.dll)

  Alt 16. Jun 2011, 15:57
Ich habe die componenten in Delphi 2007 installiert mit Zeoslib 6.6.6. Das geht gut, bis auf dem Moment wo ich joins verwende, dann knallt es in Zeoslib. (Access violation).

Ich frage mich ob SQL mit joins geht, denke mir dass es am PHP ende nur eine Tabelle ist und frage mich jetzt ob ich vielleicht etwas falsch mache oder auch ob ich irgendwo Hilfe bieten kann.

Gruss,
Teo
Teo
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: MySQL via PHP-Tunnel (über eigene libmysql.dll)

  Alt 16. Jun 2011, 20:04
Wenn du die DB-Verbindung mal über die original DLL herstellst (localhost-Datenbank) funktioniert dann deine SQL-Abfrage? Oder, wenn das nicht geht, weil du lokal keine Datenbank installiert hast: Versuche deine Abfrage mal direkt in PHP zu hinterlegen (eigene Datei auf dem Server) und versuche, ob dein Statement so funktioniert.

Dritte Variante: Zeig mal deine SQL-Anweisung.
  Mit Zitat antworten Zitat
teosuper

Registriert seit: 23. Nov 2008
11 Beiträge
 
#4

AW: MySQL via PHP-Tunnel (über eigene libmysql.dll)

  Alt 16. Jun 2011, 22:18
Die query functioniert im PHPAdmin auf der Website einwandfrei.

Ich habe allerdings etwas weiter getestet:

Meine Abfrage im PHPAdmin geht so:

SELECT * FROM sections left join pages on sections.page_id = pages.page_id

Meine Abfrage in Delphi gibt damit eine Access Violation, ich soll die Verbindung trennen und wieder erstellen bevor eine neue Abfrage geht.

Wass mir am Ende eingefallen ist, ist das ausschreiben der Felder meiner Abfrage:

SELECT pages.page_title, sections.page_id FROM sections left join pages on sections.page_id = pages.page_id

und dabei stellt sich dan eraus dass diese Abfrage DOCH functioniert.

Versteht sich dass ich "Select *" bevorzuge obwohl ich zufrieden bin mit einschliessen der Feldnamen.

(entschuldige mein Deutsch).

Ich möchte gerne ein Kompliment machen: ich bin beëindruckt!

Gruss
Teo
Teo
  Mit Zitat antworten Zitat
sonic

Registriert seit: 14. Mär 2003
30 Beiträge
 
Delphi 2006 Professional
 
#5

AW: MySQL via PHP-Tunnel (über eigene libmysql.dll)

  Alt 22. Jun 2011, 18:39
Hallo Omata,

ein kurzes Zwischenergebnis, leider bin ich noch nicht zu viel gekommen...

das komplette Einfrieren konnte ich bereits (lösen) ->
Der IdHttp in der DLL hat keinen ReadTimeout definiert, und der wartet dann scheinbar tatsächlich bis in die Ewigkeit. Leider auch wenn die Internetverbindung wieder kommt. Zumindest war das meine Erfahrung.

Die Frage ist natürlich ob der ReadTimout aus der Haupt-Anwendung gesetzt werden kann weil fix einen Wert einzustellen kann bei großen Abfragen natürlich zu Problemen führen.
(für mich habe ich mal _IdHttp.ReadTimeout := 30000 gesetzt, und dann friert's nicht komplett ein)

Einem weiteren Problem bin ich auf der Spur:
Hat man nun einen Timeout, so bekommt man auch in der function mysql_query(Handle: PMYSQL; const Query: PAnsiChar): Integer; die Timeout Exception mit, und es wird Result 1 zurückgegeben.
Trotzdem versuchen die Zeos Komponenten teilweise hartnäckig weiterzumachen... -> Exceptions.

Ich such weiter.
Lg Sonic
  Mit Zitat antworten Zitat
Tobinator

Registriert seit: 18. Mai 2008
Ort: Cottbus
53 Beiträge
 
#6

AW: MySQL via PHP-Tunnel (über eigene libmysql.dll)

  Alt 14. Aug 2011, 13:50
Hi,

ich hab mir die dateien auch mal gezogen und muss sagen, gute arbeit. es funktioniert soweit alles wunderbar, nur eine sache funktioniert bei mir noch nicht so ganz:

wenn ich einfüge oder ändere, wird aus ß ein ? und aus ä ein a usw.

also das SQL-Statement ist noch richtig, nur in der DB kommt was falsches an.

was mache ich falsch? muss ich an den komponenten oder der sqltunnel.php oder vllt. an der db noch was ändern?
oder ist es vllt. noch ein bug in deinem tunnel?
Tobias
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.032 Beiträge
 
Delphi 12 Athens
 
#7

AW: MySQL via PHP-Tunnel (über eigene libmysql.dll)

  Alt 14. Aug 2011, 15:45
Datenbank-Zeichensatz
Hier hilft das Einstellen einer anderen Codepage, auch über PHPMyAdmin.

Code:
SET SESSION CHARACTER_SET_RESULTS =latin1;
SET SESSION CHARACTER_SET_CLIENT =latin1;
Mehrbenutzerfähigkeit für Internetanwendungen
Hier gib es de Möglichkeit den aktuell angemeldeten Benutzer in die Tabelle einzutragen. Zum Beispiel um späte eine Logik zu entwickeln, die Löschvorgänge auf selbst angelegte Datensätze beschränkt. MySQL bietet hier die USER()-Funktion an: SELECT CURRENT_USER();.

Um den aktuellen Benutzer abzufragen kann man folgende Abfrage schicken:
Code:
SELECT SUBSTRING_INDEX(USER(),'@',1);
Man kann dann eine Log-Tabelle anlegen um Eintragungen zu protokolieren.
Code:
CREATE TABLE app_log
(
    t      TIMESTAMP,
    user   CHAR(16),
    host   CHAR(60)
);
Hier kann man mit einem Insert-Statement aktuellen USER und HOST eintragen. TIMESTAMP hat dabei die aktuelle Datum/Zeit-Kombination.
Code:
INSERT INTO app_log
    SET user = SUBSTRING_INDEX(USER( ),'@',1),
        host = SUBSTRING_INDEX(USER( ),'@',-1);
Oder man baut einen Trigger der den aktuellen User im Insert mit aufnimmt:
Code:
create database dbtest;
use dbtest;
grant all privileges on dbtest.* to 'testuser'@'localhost';
create table test (creator varchar(30), modificator varchar(30), text varchar(100));
create trigger ins_test before insert on test for each row set new.modificator=current_user();
Jetzt kann verhindert werden, dass ein anderer User den eigenen Datensatz löscht. Das geht über einen Before-Delete Trigger:
Code:
DROP TRIGGER IF EXISTS users_anon;
delimiter |
CREATE TRIGGER users_anon BEFORE DELETE ON users
  FOR EACH ROW BEGIN
    -- Prevent deletion
    IF (OLD.modificator <> user() ) THEN
      -- This raises an exception and prevents deletion
      INSERT INTO users VALUES (OLD);
    END IF;
  END;
Man kann auch noch eine Audit/Log Tabelle führen und sehen wer gelöscht hat:
Code:
 -- before delete trigger
     CREATE OR REPLACE TRIGGER employee_before_delete
      BEFORE DELETE
          ON MyTable
          FOR EACH ROW
      DECLARE
          v_username varchar2(10);
      BEGIN
          -- Find username of person performing the DELETE on the table
          SELECT user INTO v_username
          FROM dual;
          -- Insert record into audit table
          INSERT INTO table_audit (id,     delete_date,deleted_by )
                              VALUES (:old.id, sysdate, v_username );
     END;
Ziel der Geschichte ist eine Tabelle mehrbenutzerfähig im Internet verwalten zu können.
Etwas Feinabstimmung ist hier wohl noch drin.

Grüße in die Runde
Martin Schaefer

Geändert von mschaefer (15. Aug 2011 um 10:52 Uhr) Grund: Ergänzung
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz