2016-09-29 9 views
0

Ich versuche, eine Liste von Daten, die ich in meiner Datenbank in einem Array gespeichert habe. Ich habe die folgende Funktion versucht, aber ich bekomme nur "Array" zurück. Ich bin mir nicht sicher, was ich falsch mache oder ob es noch eine andere Möglichkeit gibt, die Daten abzurufen.Speichern Sie Daten aus der Datenbank in einem Array

+0

was bedeutet, Sie erhalten ein Array ist nicht das, was Sie wollten? – e4c5

+0

@ S.Al: Zuerst versuchen Sie die gleiche Abfrage mit einer gewünschten $ id in der phpmyadmin oder Terminal, und sehen, ob es sich um einige Zeilen oder nicht ergibt ... – JTheDev

+0

echo $ array; Wenn $ array ist, wird ein Array 'Array' 'print_r ($ array);' zurückgeben, wenn der Inhalt angezeigt werden soll – nogad

Antwort

1

Während Sie die PDO statements verwenden, können Sie die Prozedur verfolgen, bei der PDO stark genug ist, um SQL-Injektionen zu vermeiden. Aber Sie haben den Prozess in Ihrem Code nicht verfolgt. Die Verwendung von Bindeparametern wird empfohlen.

Hinweis: Ihr Code funktioniert gut, außer der Fetch-Anweisung. Sie müssen fetchAll();, so dass es in der Lage ist, alle Daten aus der resultierenden Abfrage zu erfassen, und Sie können es drucken.

Wenn dies der Fall ist, müssen Sie fetchAll(); verwenden, um mehrere Zeilen der Ausgabe aus dem DB abzurufen, oder für das Abrufen der einzelnen Zeile der Ausgabe wird Ihr Code gut aussehen.

Lösung One:

Sie binden Parameter in der Funktion verwenden können, so dass es SQL Injections vermeidet.

functions.php

function getdate($id) 
{ 
$select = $conn->prepare("SELECT `date` FROM `dates` WHERE user_id= :id "); 
$select->bindValue(':id', $id, PDO::PARAM_INT); 
$select->execute(); 
$result = $select->fetchAll(PDO::FETCH_ASSOC); 
return $result; 
} 

Andere Datei können Sie die Funktion Aufruf wie folgt erhalten.

$result = getdate(3); 

Und Sie müssen print_r() die $result. So wird es in der array() Struktur resultieren.

Einige weitere Erläuterungen zu den Abrufanweisungen in PDO.

PDO hat einige extrem handliche Methoden das Abfrageergebnis in verschiedenen Formaten zurückzukehren:

  1. fetch() - ein Allzweck-ähnliche holen Methode mysql_fetch_array().
  2. fetchAll() - um alle Zeilen ohne While-Schleife zu erhalten.
  3. - um einen einzelnen Skalarwert zu erhalten, ohne zuerst das Array zu erhalten.

Beispiel:

$stmt = $pdo->prepare("SELECT id,name FROM songs WHERE dt=curdate()"); 
$stmt->execute(); 
$data = $stmt->fetchAll(); 

Jetzt haben wir alle Songs in der $ data-Array und wir können die Seite desing wie wir wollen.

<table> 
<?php foreach ($data as $row): ?> 
    <tr> 
    <td> 
     <a href="songs.php?<?=$row['id']?>"> 
     <?=htmlspecialchars($row['name'])?> 
     </a> 
    </td> 
    </tr> 
<?php endforeach ?> 
</table> 
1

Wenn Sie mehr als eine Zeile erwarten, sollte es "fetchAll" sein. Wenn Sie nicht alles brauchen, brauchen Sie nur die Spalten, die Sie brauchen.

Dieses von der PHP PDO Dokumentation für fetchAll geändert, ich habe Ihre Benutzer-ID ist eine ganze Zahl angenommen ...

$sth = $dbh->prepare("SELECT date FROM dates WHERE user_id= :userid "); 
$sth->bindValue(':userid', $id, PDO::PARAM_INT); 
$sth->execute(); 
$result = $sth->fetchAll(PDO::FETCH_ASSOC); 
print_r($result); 

Die print_r Sie zeigen, was das Array dann Zugriff Sie wie so kann aussieht es, wie Nogad sagt.

Verwandte Themen