Results 1 to 15 of 15

Thread: connectie mysql

  1. #1
    Senior Member Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    2,085

    connectie mysql

    Een bestaand programma moet uitgebreid worden met wat backoffice functies. Een koppeling naar de mysql zou mooi zijn, nu weet ik dat de meeste providers geen toegang geven om de database rechtstreeks te benaderen. via de website kan ik phpmyadmin opstarten en gegevens ophalen. Hoe doe je dit zonder phpadmin?Hoe is dit op te lossen, wat hints en tips zou prettig zijn.
    10.4.2, Delphi2010, of Lazarus 2.2.0

  2. #2
    Welke database gebruikt je programma nu?
    Die kun je ook gewoon in php gebruiken.

    Je doet dat dus door een php pagina te maken waarin je een connectie maakt met de database en de gegevens ophaalt. Je gebruikt daarbij het beste PDO.

    https://www.php.net/manual/en/book.pdo.php

  3. #3
    Senior Member Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    2,085
    Het programma werkt nu ook met mysql, die staat op een server binnen het bedrijf.
    De database waar ik gegevens wil ophalen en plaatsen staat bij een provider, dat is de database achter een wordpress website.
    Via een aparte inlog kan ik daar phpadmin opstarten en de tabellen uitlezen.
    Maar die handmatige handelingen moeten vertaald worden naar iets waar het bestaande programma mee kan werken.
    Provider restricties verbieden directe toegang (gelukkig , maar dat maakt het wel lastiger om de gegevens te krijgen

    PDO ga ik eens bekijken
    10.4.2, Delphi2010, of Lazarus 2.2.0

  4. #4
    Ik neem aan dat je zelf phpadmin ook als PHP pagina's op de webserver kunt zetten?
    Dan kun je inderdaad gewoon een PHP pagina die ook connectie maakt met mySQL.

    Je kunt ook mysqli gebruiken (niet te verwarren met de oudere mysql).

    Simpel voorbeeldje:
    PHP Code:
    1. $mysql_host = "localhost";
    2. $mysql_db = "databasenaam";
    3. $mysql_user = "usernaam";
    4. $mysql_pass = "wachtwoord"; // deze gegevens zou je ook in een private file kunnen zetten en dan includen voor de veiligheid
    5. $dbc = mysqli_connect($mysql_host, $mysql_user, $mysql_pass) or die ("Could not connect to MySQL server");
    6. $db = mysqli_select_db($dbc, $mysql_db) or die ("Could not connect to database");
    7. $query = "select * from mijntabel where veld='waarde';";
    8. $rslt = mysqli_query($dbc, $query);
    9. $num=mysqli_num_rows($rslt);
    10. if ($num > 0) {
    11.   while ($row = mysqli_fetch_array($rslt)) {
    12.     print_r($row);
    13.   }
    14. }

    of PDO (hier toevallig met firebird maar mySQL of MariaDB kan ook)
    PHP Code:
    1. try {
    2.   $pdo = new PDO("firebird:host=$databasehost;dbname=$databasename;charset=utf8", $databaseuser, $databasepass);
    3.   $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    4.   $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    5.   $query = $pdo->prepare($sql);
    6.   $query->execute();
    7. }
    8. catch(exception $e) {
    9.   echo 'Exception -> ';
    10.   var_dump($e->getMessage());
    11.   exit();
    12. }
    13. for($i=0; $row = $query->fetch(PDO::FETCH_ASSOC); $i++){
    14.     print_r($row);
    15. }

  5. #5
    Senior Member Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    2,085
    ik ga dat uitproberen
    10.4.2, Delphi2010, of Lazarus 2.2.0

  6. #6
    als je er met SSH op kunt bij die provider dan zou je een SSH tunnel kunnen gebruiken.

    De meeste budget shared hosters zullen dat niet hebben, maar wie weet een optie om wel even te bekijken.

  7. #7
    Senior Member
    Join Date
    Dec 2003
    Location
    Den Haag
    Posts
    210
    Een andere optie is MyDAC van Devart.

    Met een zogenaamde connectie door HTTP tunnel is de database van buitenaf benaderbaar.
    Connection Through HTTP Tunnel

  8. #8
    Senior Member Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    2,085
    Ik ben de aangedragen ideeën aan het uitproberen, echter andere prioriteiten verstoren de voortgang
    Ik hou het warm
    10.4.2, Delphi2010, of Lazarus 2.2.0

  9. #9
    Senior Member Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    2,085
    Bij MyDac hebben ze het over een tunnel.php script welke je aan de andere kant moet plaatsen.
    Ik heb geen MyDac deze oplossing gaat on hold
    10.4.2, Delphi2010, of Lazarus 2.2.0

  10. #10
    Senior Member Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    2,085
    Na talloze pogingen met de verschillende aangedragen ideeën.
    Geef ik het bijna op, nadat mijn provider mij op belde en melde dat een Mysql database, nooit rechtstreeks benaderbaar is.
    Uit veiligheid overwegingen, duidelijk en begrijpelijk, maar voor mij wel lastig

    Via een rest verbinding op een webpagina welke via de website beschikbaar komt, zou het moeten kunnen.
    Met de nodige authenticatie uiteraard.
    We stoeien verder :-)

    Peter
    10.4.2, Delphi2010, of Lazarus 2.2.0

  11. #11
    Je komt dan in feite terug bij Rvk's eerste antwoord. Je PHP script kan bij de database. Dat kan als brug (of als tunnel, dus) dienen tussen de Delphi client en de MySQL database.

    In een heel simpele versie, zou je client simpelweg de SQL kunnen posten naar een PHP-script, het script kan de query uitvoeren, het resultaat omzetten naar Json of XML (of CSV, als je daar gelukkig van wordt), en op de client lees je dat uit en vertaal je het naar een client dataset. M.b.v. de REST client kan je makkelijk zo'n url aanroepen, en kan je zelfs het Json-antwoord naar een dataset omzetten, zonder een regel code.

    Natuurlijk is het wel een risico om hele queries over de lijn te sturen. Iemand anders zou diezelfde url kunnen gebruiken om toegang tot je hele database te krijgen. Het is dus beter om geen hele queries te sturen, maar specifieke urls te implementeren voor specifieke soorten queries die je nodig hebt, bijvoorbeeld

    jescript.php?query=get_klant&klant_id=1234

    Je script kan dan kijken wat voor soort verzoek het is, (get_klant), om welke klant het gaat (1234), en een stukje Json teruggeven met de informatie van die klant. Dat is een stuk veiliger, want je script kan niets anders dan de specifieke queries die je geimplementeerd hebt. En natuurlijk wil je dan bij voorkeur nog steeds maatregelen nemen zoals https en een wachtwoord of OAuth authenticatie, om te voorkomen dat je API misbruikt wordt.
    1+1=b

  12. #12
    Quote Originally Posted by Wok View Post
    Na talloze pogingen met de verschillende aangedragen ideeën.
    Geef ik het bijna op, nadat mijn provider mij op belde en melde dat een Mysql database, nooit rechtstreeks benaderbaar is.
    Uit veiligheid overwegingen, duidelijk en begrijpelijk, maar voor mij wel lastig
    Ja, dat had ik je ook wel kunnen zeggen. Het is maar zelden dat bij externe providers de MySQL installatie opengezet wordt.

    Vandaar dat je eigenlijk altijd met een PHP pagina moet werken die de connectie opzet en de data ophaalt en in JSON formaat bijvoorbeeld weer teruggeeft.

    mysqli en PDO zijn meestal wel standaard geïnstalleerd voor PHP. Dus dan kun je mijn voorbeeldjes in mijn vorige post zo gebruiken.
    Je kunt met de volgende PHP pagina de info oproepen wat er allemaal voor PHP geinstalleerd is. (bij mijn provider staan mysqli en PDO er standaard bij).

    een_niet_makkelijk_te_raden_filenaam_voor_veilighe id.php
    PHP Code:
    1. <?php
    2.   phpinfo();
    3. ?>

    oproepen met https://www.jouwdomeinnaam.nl/een_ni...veiligheid.php

  13. #13
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Quote Originally Posted by GolezTrol View Post
    Natuurlijk is het wel een risico om hele queries over de lijn te sturen. Iemand anders zou diezelfde url kunnen gebruiken om toegang tot je hele database te krijgen. Het is dus beter om geen hele queries te sturen, maar specifieke urls te implementeren voor specifieke soorten queries die je nodig hebt, bijvoorbeeld

    jescript.php?query=get_klant&klant_id=1234

    Je script kan dan kijken wat voor soort verzoek het is, (get_klant), om welke klant het gaat (1234), en een stukje Json teruggeven met de informatie van die klant. Dat is een stuk veiliger, want je script kan niets anders dan de specifieke queries die je geimplementeerd hebt. En natuurlijk wil je dan bij voorkeur nog steeds maatregelen nemen zoals https en een wachtwoord of OAuth authenticatie, om te voorkomen dat je API misbruikt wordt.
    Zo heb ik in het verleden ooit een een chatprogramma omgezet van php naar Delphi. Zo kon ik zowel native windows als via webbrowers communiceren naar de zelfde chat.
    Delphi is great. Lazarus is more powerfull

  14. #14
    Senior member mzwollo's Avatar
    Join Date
    Oct 2004
    Location
    Larserbos
    Posts
    155
    Ik maak in mijn Delphi-applicatie een script met een aantal opdrachten voor de mysql database op de website.
    Dat script wordt opgeslagen met een at random geproduceerde naam, bijv f4Jk7d.Gf3 en met SFTP naar de webserver gestuurd.
    Vanuit de Delphi-applicatie wordt mbv http het commando gegeven: https://..../runscript.php?q=f4Jk7d.Gf3

  15. #15
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Quote Originally Posted by Benno View Post
    als je er met SSH op kunt bij die provider dan zou je een SSH tunnel kunnen gebruiken.

    De meeste budget shared hosters zullen dat niet hebben, maar wie weet een optie om wel even te bekijken.
    Niet perse, vziw heeft b.v. Strato dat wel voor de Eur 10/maand accounts.

    Dus ssh tunneling zou misschien mogelijk zijn. Moet je alleen een plink script starten voor je db app.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •