Seite 1 von 1

PDO - Rückgabe-Array immer leer.

Verfasst: 25.10.2015 15:44
von mickedplay
Hallo ihr Experten.

Ich bin derzeit dabei, Daten aus einer MySQL-Datenbank abzurufen.
Im folgenden Pastebin-Link funktioniert allerdings nur das obere Beispiel, und das untere gibt nur ein leeres Array zurück.
Woran kann das liegen, bzw. was ist falsch?

http://pastebin.com/Q5y7ARAd

Nutze ich nur "SELECT * FROM players" funktioniert alles. Aber sobald ich "WHERE" nutzen möchte, geht garnichts mehr.

Bitte um Hilfe, und danke bereits im Vorraus, ihr seit meine letzte Hoffnung. Internetsuche hat zum Größten Teil immer nur zu dem ersten Beispiel geführt. :(

Re: PDO - Rückgabe-Array immer leer.

Verfasst: 25.10.2015 17:02
von Crizzo
Hi,

was soll denn =: für ein Operator sein?

Und UUID schreibst du jetzt groß weil?

Grüße

Re: PDO - Rückgabe-Array immer leer.

Verfasst: 25.10.2015 18:46
von mickedplay
BlackHawk87 hat geschrieben:Hi,

was soll denn =: für ein Operator sein?

Und UUID schreibst du jetzt groß weil?

Grüße
Das "UUID" in "WHERE UUID=" ist der Spaltenname. Der ist in meiner Datenbank groß geschrieben.
Und "=:" bezieht sich auf PDOStatement::bindParam() von PDO. http://php.net/manual/de/pdostatement.bindparam.php

Re: PDO - Rückgabe-Array immer leer.

Verfasst: 25.10.2015 19:58
von Elsensee
Wenn ein leeres Array zurückgegeben wird, würde ich prüfen, ob die UUID denn auch in der Datenbank vorhanden ist. Lieber zweimal prüfen - manchmal sieht man den Wald vor lauter Bäumen nicht.

Ansonsten fällt mir nichts ein, was daran nicht klappen könnte. Vielleicht mal alternativ, die Parameter direkt im execute() übergeben? Wie hier:

Code: Alles auswählen

$query->>execute(array(':uuid' => $this->uuid)); 

Re: PDO - Rückgabe-Array immer leer.

Verfasst: 25.10.2015 20:18
von mickedplay
Elsensee hat geschrieben:Wenn ein leeres Array zurückgegeben wird, würde ich prüfen, ob die UUID denn auch in der Datenbank vorhanden ist. Lieber zweimal prüfen - manchmal sieht man den Wald vor lauter Bäumen nicht.

Ansonsten fällt mir nichts ein, was daran nicht klappen könnte. Vielleicht mal alternativ, die Parameter direkt im execute() übergeben? Wie hier:

Code: Alles auswählen

$query->>execute(array(':uuid' => $this->uuid)); 
Die UUID ruf ich von einer Webseite ab, die dort im JSON-Format zu finden ist. Und das klappt auch einwandfrei.

Ich hab es mal mit

Code: Alles auswählen

$query -> execute(array(':uuid', $this -> uuid));
probiert, jedoch wird mir ein Fehler geworfen:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens' in /var/www/vhosts/<url>/httpdocs/stats/index.php:38 Stack trace: #0 /var/www/vhosts/<url>/httpdocs/stats/index.php(38): PDOStatement->execute(Array) #1 /var/www/vhosts/<url>/httpdocs/stats/index.php(4): StatsLoader->__construct() #2 {main} thrown in /var/www/vhosts/<url>/httpdocs/stats/index.php on line 38
Und Zeile 38 ist die (hier) oben gezeigte.[/i]


####### EDIT ########
Okay, nun passiert einfach garnichts:

Code: Alles auswählen

try {
    $handler = new PDO($strDbLocation, $strDbUser, $strDbPassword);
    $handler -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $exeption) {
    die('Sorry, aber unser Dienst ist derzeit nicht erreichbar.');
}
    $query = $handler -> prepare('SELECT * FROM players WHERE UUID=:uuid');
    $query -> bindParam(':uuid', $this -> uuid);
    $query -> execute(array(":uuid" => $this -> uuid));
    $r = $query -> fetch(PDO::FETCH_ASSOC);
    echo 'username: ' . $r['username'], '<br>';
    foreach ($r as $key => $value) {
        echo $value;
    }