MySQL UDF - mit libmySQL.dll (kein ODBC)

  • Diese UDFs erlauben den Zugriff auf MySQL-Datenbanken ohne die Installation der ODBC-Treiber. Dazu wird nur eine DLL benötigt, die im Download enthalten ist.

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

    AutoIt Version: 3.2.8.1 (beta)
    Author: Prog@ndy

    Script Function:
    MySQL-Plugin Demo Script

    #ce ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    #include <array.au3>
    #include "mysql.au3"

    [/autoit] [autoit][/autoit] [autoit]

    ; MYSQL starten, DLL im PATH (enthält auch @ScriptDir), sont Pfad zur DLL angeben. DLL muss libmysql.dll heißen.
    _MySQL_StartUp()
    If @error Then Exit MsgBox(0, '', "")
    MsgBox(0, "DLL Version:",_MySQL_Get_Client_Version()&@CRLF& _MySQL_Get_Client_Info())

    [/autoit] [autoit][/autoit] [autoit]

    $MysqlConn = _MySQL_Init()

    [/autoit] [autoit][/autoit] [autoit]

    ;Fehler Demo:
    MsgBox(0,"Fehler-Demo","Fehler-Demo")
    $connected = _MySQL_Real_Connect($MysqlConn,"localhostdfdf","droot","","cdcol")
    If $connected = 0 Then
    $errno = _MySQL_errno($MysqlConn)
    MsgBox(0,"Error:",$errno & @LF & _MySQL_error($MysqlConn))
    If $errno = $CR_UNKNOWN_HOST Then MsgBox(0,"Error:","$CR_UNKNOWN_HOST" & @LF & $CR_UNKNOWN_HOST)
    Endif

    [/autoit] [autoit][/autoit] [autoit]

    ; XAMPP cdcol
    MsgBox(0, "XAMPP-Cdcol-demo", "XAMPP-Cdcol-demo")

    [/autoit] [autoit][/autoit] [autoit]

    $connected = _MySQL_Real_Connect($MysqlConn, "localhost", "root", "", "cdcol")
    If $connected = 0 Then Exit MsgBox(16, 'Connection Error', _MySQL_Error($MysqlConn))

    [/autoit] [autoit][/autoit] [autoit]

    $query = "SELECT * FROM cds"
    _MySQL_Real_Query($MysqlConn, $query)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $res = _MySQL_Store_Result($MysqlConn)

    [/autoit] [autoit][/autoit] [autoit]

    $fields = _MySQL_Num_Fields($res)

    [/autoit] [autoit][/autoit] [autoit]

    $rows = _MySQL_Num_Rows($res)
    MsgBox(0, "", $rows & "-" & $fields)

    [/autoit] [autoit][/autoit] [autoit]

    ; Zugriff 1
    MsgBox(0, '', "Zugriff Methode 1- Handarbeit")
    Dim $array[$rows][$fields]
    For $k = 1 To $rows
    $rowPtr = _MySQL_Fetch_Row($res)
    $mysqlrow = _MySQL_Create_RowStruct($rowPtr, $fields)

    [/autoit] [autoit][/autoit] [autoit]

    $lengths = _MySQL_Fetch_Lengths($res)
    $lenthsStruct = _MySQL_Create_LengthsStruct($lengths, $res)

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To $fields
    $length = DllStructGetData($lenthsStruct, 1, $i)
    $fieldPtr = DllStructGetData($mysqlrow, 1, $i)
    $data = DllStructGetData(DllStructCreate("char[" & $length & "]", $fieldPtr), 1)
    $array[$k - 1][$i - 1] = $data
    Next
    Next
    _ArrayDisplay($array)

    [/autoit] [autoit][/autoit] [autoit]

    ; Zugriff 2
    MsgBox(0, '', "Zugriff Methode 2 - Reihe für Reihe")
    _MySQL_Data_Seek($res, 0) ; nur zum zum Zurücksetzen an den Anfang der Abfrage
    Do
    $row1 = _MySQL_Fetch_Row_StringArray($res)
    If @error Then ExitLoop
    _ArrayDisplay($row1)
    Until @error

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, '', "Zugriff Methode 3 - alles in ein 2D Array")
    $array = _MySQL_Fetch_Result_StringArray($res)
    _ArrayDisplay($array)

    [/autoit] [autoit][/autoit] [autoit]

    ; Feldinformationen
    MsgBox(0, '', "Zugriff Feldinformationen")
    Dim $arFields[$fields][3]
    For $i = 0 To $fields - 1
    $field = _MySQL_Fetch_Field_Direct($res, $i)
    $arFields[$i][0] = _MySQL_Field_ReadValue($field, "name")
    $arFields[$i][1] = _MySQL_Field_ReadValue($field, "table")
    $arFields[$i][2] = _MySQL_Field_ReadValue($field, "db")
    Next
    _ArrayDisplay($arFields)

    [/autoit] [autoit][/autoit] [autoit]

    ; Abfrage freigeben
    _MySQL_Free_Result($res)

    [/autoit] [autoit][/autoit] [autoit]

    ; Verbindung beenden
    _MySQL_Close($MysqlConn)
    ; MYSQL beenden
    _MySQL_ShutDown()

    [/autoit]


    Bitte testen :)
    //Edit: neue Version. Funktionen haben Informationen und links auf die MySQL-Hilfe
    Alte Downloads: 15
    DOWNLOAD Downloads: [Blockierte Grafik: http://progandy.co.cc/jdlcount.php/id=4&amp;dl.png]
    Jetzt nur noch für AutoIt 3.3.2.0 aufwärts
    Das ZIP-Paket enthält nun DLLS für x84 und x64.


    EDIT BugFix: Zusätzlich auch auf Github

    • Offizieller Beitrag

    Hi,

    die DLL ist bei MySQL dabei, normal im Verzeichnis lib\opt!

  • Die DLL kann man auch hier herunterladen:
    http://www.dll-files.com/dllindex/dll-files.shtml?libmysql

    Die nächsten Zwei Wochen bin ich jedoch im Urlaub und kann nicht weiter entwickeln. Danach wird es jedoch neue Versionen geben. Zur Zeit übernehme ich die Konstanten und werde bald den Ergebnisabruf einbauen
    // Beim Abruf der Ergebnisse gibt es leider ein Problem: mysql liefert einen Pinter auf Struktur und/oder ein Array zurück,was DLLCall nicht unterstützt :(
    // Ich werde daher wohl versuchen eine DLL schreiben, die das passend zurückgibt

    2 Mal editiert, zuletzt von progandy (10. August 2007 um 19:06)

  • Ich bin etwas weiter gekommen. Endlich funktioniert auch der Abruf der Ergebnisse. [Blockierte Grafik: http://www.cosgan.de/images/midi/haushalt/k050.gif]
    Die neue Version kommt bald
    Hier ist einmal die neue Version. Folgende Funktionen sind integriert: Leider stürzt das Programm bei einem Fehler immer ab und ich weiß noch nicht, wie ich das umgehen kann. Das Script benötigt die libmysql.dll im Scriptordner
    /Edit: veraltet

    3 Mal editiert, zuletzt von progandy (7. Dezember 2008 um 18:07)

  • Hey,
    wie bekomme ich den Zugriff auf die MySql Datenbank, die wird doch von der
    Server Firewall geblockt?

    Deswegen gibt´s bei mir immer die blöde Meldung:
    Can't connect to MySQL server on 'MyServer' (10060)

    Edit:
    Jo, habe mal kurz test weise mit Plesk den Zugriff in der Firewall für MySQL
    erlaubt, klappt dann.
    Man kann ja auch eine IP angeben und nur von dort ist dann der Zugriff erlaubt. (Werde es mal mit DynOrg testen)

    Oder gibt´s noch nen anderen Weg?

    Einmal editiert, zuletzt von thunder-man (16. Oktober 2007 um 04:19)

  • Denk nicht.
    Mal ne Neue Version, da es einen Fehler gab (Num_Rows fehlte und Fetch_Fields arbeitete nicht korrekt)

    Jetzt mit Beispiel für XAMPP CD-Datenbank


    Zitat

    Leider stürzt das Programm bei einem Fehler immer ab und ich weiß noch nicht, wie ich das umgehen kann.

    (Außer alles in eine c-DLL packen und die dann aufrufen. Muss ich aber eh schon für ein paar Sachen machen.)

    /Edit: veraltet

    2 Mal editiert, zuletzt von progandy (7. Dezember 2008 um 18:06)

  • Stimmen die Angeben? Ich weis, das ist ein Problem, wenn Der Server down ist, die Adresse, der Benutzer oder das PW nicht stimmen, dann stürzt das Programm ab. Das tut es auch, wenn Libmysql.dll im Scriptverzeichnis fehlt

    //Edit: Werde demnächst versuchen, Das als PlugIn zu erstellen

    Einmal editiert, zuletzt von progandy (4. Dezember 2007 um 14:18)

  • Ich hab das PluIn mal angefangen. Es läuft, aber Dokumentation fehlt noch fast vollständig.
    Beispiel für XAMPP- cddatenbank
    Benötigt libmysql.dll im Scriptverzeichnis oder im Windowsverzeichnis

    /Edit: veraltet

    Einmal editiert, zuletzt von progandy (7. Dezember 2008 um 18:06)

  • So, ziemlich lange her, aber bald gibt es eine neue Version :) dieses mal ohne Hilfsplugin und ein paar Funktionen mehr.

  • Hallo zusammen, würde das Script auch gerne nutzen aber leider kommt unser proxy nicht mit dem download klar. gibt es vllt eine möglichkeit das mir jemand den genauen downloadlink sagt oder mir das paket schickt?

    mfg

    PS: jetz ist erstmal pause :)

  • Hi, ich habe ein kleine Frage:
    "Kann man mit dieser MySQL UDF auf eine Internet MySQL Datenbank bei einem Webshhoster zugreifen?"
    Bei mir hats nicht geklappt oder gehört das nur für eine lokale Datenbank?

    L.G. FireTiger

  • Hi, ich habe ein kleine Frage:
    "Kann man mit dieser MySQL UDF auf eine Internet MySQL Datenbank bei einem Webshhoster zugreifen?"
    Bei mir hats nicht geklappt oder gehört das nur für eine lokale Datenbank?

    L.G. FireTiger


    Du kannst mit der UDF auch auf externe Datenbanken zugreifen. Das Problem ist aber, dass die meisten Hoster die Datenbanken für externen Zugriff sperren Du kannst sie also nur vom Webserver aus erreichen.

  • Zitat

    Das Problem ist aber, dass die meisten Hoster die Datenbanken für externen Zugriff sperren Du kannst sie also nur vom Webserver aus erreichen.

    Wie meinst du das? Kannst du mir mal ein Beispiel posten?