MySQL _MySQL_Num_Rows problem

  • Hallo,
    ich habe ein älteres Script was lief genommen und nur das äussere geändert. Heute habe ich nur den DB Login geändert und jetzt kommt ein Error.

    Spoiler anzeigen
    [autoit]

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

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

    $res = _MySQL_Store_Result($MysqlConn)
    $fields = _MySQL_Num_Fields($res)
    $rows = _MySQL_Num_Rows($res)
    Dim $array[$rows][$fields]
    For $k = 1 To $rows
    $mysqlrow = _MySQL_Fetch_Row($res, $fields)

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

    $lenthsStruct = _MySQL_Fetch_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 ($rows)

    [/autoit]
    Error
    [autoit]

    Dim $array[$rows][$fields]
    Dim $array[^ ERROR

    [/autoit]

    was mache ich falsch ?

  • Es gibt vermutlich kein Ergebnis, also 0 Reihen. Also musst du eine Fehlerabfrage einbauen ;)

    [autoit]

    $res = ...
    If $res Then ; wenn Ergebnis existiert
    ...
    $rows = ...
    If $rows > 0 Then
    ...
    EndIf
    EndIf

    [/autoit]
  • Weil dein neuer benutzer eventuell nicht die Berechtigung hat, auf die Tabelle bzw. DAtenbank zuzugreifen?
    Weil die Tabelle leer ist?
    und sonst zeigt meine Glaskugel noch viel Nebel ;)
    Lass doch mal nach jedem befehl per _MySQL_Error() den Fehler ausgeben oder so.

  • Ich meine, nach jedem Befehl, angefangen von der Verbindung über die Query, das Laden des Ergebnisses... Am besten inklusive der Zahl von Func _MySQL_Errno ;)

  • Nach jeder _MySQL_... folgende Funktion aufrufen, wenn ein Fehler auftaucht, bitte posten ;)

    Spoiler anzeigen
    [autoit]

    Func _CheckMySQLError($hMySQL, $line = @ScriptLineNumber)
    ; Author: ProgAndy
    If Not $hMySQL Then
    MsgBox(48, '', "Fehlerhaftes MySQL-handle" & @CRLF & "Zeile: " & $line)
    Return 1
    Else
    Local $no = _MySql_Errno($hMySQL)
    If $no Then MsgBox(48, 'MySQL-Fehler:', "NUmmer: " & $no & @CRLF & _MySql_Error($hMySQL) & @CRLF & "Zeile: " & $line-1 & " - " & $line)
    Return $no
    EndIf
    Return 0
    EndFunc

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

    ; Beispiel:
    $MysqlConn = _MySQL_Init()
    _CheckMySQLError($MysqlConn)
    _MySQL_Real_Connect($MysqlConn, ...)
    _CheckMySQLError($MysqlConn)
    ...

    [/autoit]
  • Wie wird $MySQLConn erzeugt? von _Init oder von _Real_Connect? Wenn es vom Connect ist, dann mach es mal so wie im beispiel, um deinen Fehler zu erfahern

    Und führst du auch als x86 (32bit) aus (nur falls du Win x64 hast)