2017-02-23 3 views
1

Das gibt mir ein Array mit zwei Elementen, obwohl die Ausgabe der Abfrage eine einzelne Zelle sein sollte, dann ist es möglicherweise offensichtlich, aber nicht auf einen Anfänger wie michArray statt eines einzelnen Elements in PHP

$db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $options); 
$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'); 

function dbFetch($db,$query) 
    { 
     $stmt = $db->prepare($query); 
     $stmt->execute(); 
     return $stmt->fetch(); 
    } 

$query = " 
SELECT 
Name 
FROM Players WHERE PlayerID='21'"; 
$rows = dbFetch($db,$query); 
var_dump($rows); 

Ausgang:

array(2) { ["Name"]=> string(6) "PLAYERNAME" [0]=> string(6) "PLAYERNAME" } 

Es wiederholt die Ausgabe zuerst als Associate und zweitens als numerisch.

+0

Sie erhalten sowohl einen assoziativen als auch einen numerischen Index. Verwenden Sie einfach einen mit '$ stmt-> fetch (PDO :: FETCH_ASSOC);' –

Antwort

1

Verwenden Sie stattdessen PDOStatement::fetchColumn(). Es wird die erste Spalte aus dem ersten Datensatz zurückgegeben.

Auch würde ich wetten, dass Sie nicht nach "21" suchen, sondern eher eine Variable. In diesem Fall würden Sie viel besser dran prepared statements verwenden und die Code-Modifizierung wie so:

$db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $options); 
$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'); 
function dbFetch($db,$query,$params=[]) 
{ 
    $stmt = $db->prepare($query); 
    $stmt->execute($params); 
    return $stmt->fetch(); 
} 

$query = " 
SELECT 
Name 
FROM Players WHERE PlayerID=?"; 
$params = array("your user id"); 
$rows = dbFetch($db,$query,$params); 
var_dump($rows); 
+0

Tatsächlich funktioniert das. Vielen Dank. – denski

+0

Hätten Sie einen Einblick, warum zwei Artikel erstellt werden? – denski

+1

@denski [der Standard fetch_style] (http://php.net/manual/en/pdostatement.fetch.php) soll sowohl numerisch als auch assoziativ holen. 'PDO :: FETCH_BOTH' –

1

wohl aufgrund Stil holen.

Per PHP-Handbuch:

öffentliches gemischtes PDOStatement :: holen ([int $ fetch_style [, int $ cursor_orientation = PDO :: FETCH_ORI_NEXT [, int $ cursor_offset = 0 ]]]) Fetches eine Zeile aus einer Ergebnismenge, die einem PDOStatement Objekt zugeordnet ist. Der Parameter fetch_style legt fest, wie PDO die Zeile zurückgibt.

fetch_style Steuert, wie die nächste Zeile an den Aufrufer zurückgegeben wird. Dieser Wert muss eine der PDO :: FETCH_ * -Konstanten sein, standardmäßig Wert von PDO :: ATTR_DEFAULT_FETCH_MODE (standardmäßig PDO :: FETCH_BOTH).

PDO :: FETCH_ASSOC: gibt einen Array von Spaltennamen indiziert als in Ihrem Ergebnis zurückgegeben gesetzt

PDO :: FETCH_BOTH (Standard): gibt einen Array von beiden Namensspalte indiziert und 0-indiziert Spaltennummer wie in Ihrem Ergebnis zurückgegeben gesetzt

PDO :: FETCH_BOUND: liefert TRUE, und ordnet die Werte der Spalten im Ergebnis auf die PHP-Variablen festgelegt, auf die sie mit der PDOStatement :: bindColumn() -Methode

gebunden waren

PDO :: FETCH_CLASS: gibt eine neue Instanz der angeforderten Klasse zurück, wobei die Spalten der Ergebnismenge den benannten Eigenschaften in der Klasse zugeordnet werden und anschließend der Konstruktor aufgerufen wird, sofern nicht auch PDO :: FETCH_PROPS_LATE angegeben wird. Wenn fetch_style PDO :: FETCH_CLASSTYPE (z. B. PDO :: FETCH_CLASS | PDO :: FETCH_CLASSTYPE) enthält, wird der Name der Klasse aus einem Wert der ersten Spalte ermittelt.

PDO :: FETCH_INTO: aktualisiert eine bestehende Instanz der Klasse angefordert, Abbildung der Spalten des Ergebnisses genannten Eigenschaften in der Klasse gesetzt

PDO :: FETCH_LAZY: kombiniert PDO :: FETCH_BOTH und PDO :: FETCH_OBJ, wodurch das Objekt Variablennamen, wie auf sie zugegriffen wird

PDO :: FETCH_NAMED: gibt ein Array mit der gleichen Form wie PDO :: FETCH_ASSOC, mit der Ausnahme, dass, wenn es mehrere Spalten mit dem gleichen Namen, den Wert Mit diesem Schlüssel wird ein Array aller Werte in der ro bezeichnet w, die diesen Spaltennamen

PDO :: FETCH_NUM hatte: Gibt einen Array von Spaltennummer indiziert als in der Ergebnismenge zurück, beginnend in Spalte 0

PDO :: FETCH_OBJ: gibt ein anonymes Objekt mit Eigenschaftsnamen dass die Spaltennamen entsprechen in Ihrem Ergebnis zurückgegeben gesetzt

PDO :: FETCH_PROPS_LATE: wenn mit PDO :: FETCH_CLASS, das Konstruktor der Klasse verwendet wird aufgerufen, bevor die Eigenschaften aus den jeweiligen Spaltenwerten zugeordnet sind.

+0

Danke dafür. – denski

Verwandte Themen