mach mal var_dump($row);
Ankündigung
Einklappen
Keine Ankündigung bisher.
Darstellen von Ergebnissen einer DB-Abfrage in einer Tabelle mit PDO
Einklappen
Neue Werbung 2019
Einklappen
X
-
Zuletzt geändert von Greehorn17; 30.01.2017, 17:20.Wow, da is ganz schön viel drin!
Ich hab´s!!
PHP-Code:
foreach ($row as $value) { // goes around until there are no columns left
echo "<td>" . $value . "</td>"; //Prints the data
}
Kommentar
-
Darf ich abschließend noch einmal auf die anfängliche Frage der Sicherheit von PDP bzw. PDO Prepared Statements zurückkommen?
Also wenn man eine Abfrage folgendermaßen macht:
PHP-Code:
$stmt = $db->prepare('SELECT * FROM `table` WHERE foo = :foo');
$stmt->bindValue(':foo', $foo);
$stmt->execute();
... ist man vor SQL-Injection sicher. Aber warum eigentlich? Ich meine, auch hier müssen die von außen eingegebenen Werte letztendlich in die Datenbank zur Abfrage.
Und allerletzte Frage: macht es Sinn in puncto Sicherheit zuerst extern eingegebene Werte über mysqli_real_escape_string() laufen zu lassen und dann die Abfrage über Prepared Statements zu machen oder erhöht beides zusammen nicht die Sicherheit im Vergleich zu Prepared Statements alleine?
Kommentar
-
... ist man vor SQL-Injection sicher. Aber warum eigentlich? Ich meine, auch hier müssen die von außen eingegebenen Werte letztendlich in die Datenbank zur Abfrage.
Und allerletzte Frage: macht es Sinn in puncto Sicherheit zuerst extern eingegebene Werte über mysqli_real_escape_string() laufen zu lassen und dann die Abfrage über Prepared Statements zu machen oder erhöht beides zusammen nicht die Sicherheit im Vergleich zu Prepared Statements alleine?
Kommentar
-
-> Handbuch .. es geht um Parameter von Außen.
Zitat von HandbuchDie Parameter für Prepared Statements müssen nicht maskiert werden. Der Treiber übernimmt das automatisch. Wenn eine Anwendung ausschließlich Prepared Statements benutzt, kann sich der Entwickler sicher sein, dass keine SQL-Injection auftreten wird. (Wenn aber trotzdem andere Teile der Abfrage aus nicht zuverlässigen Eingaben generiert werden, ist dies immer noch möglich.)The string "()()" is not palindrom but the String "())(" is.
Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
PHP.de Wissenssammlung | Kein Support per PN
Kommentar
-
Danke für die Info!
Hab da jetzt leider am Schluss noch ein Problem bekommen beim Wechsel von mysqli zu PDO:
PHP-Code:
if ($zeilen > 0) {
echo "<table id='myTable' class='tablesorter altRowstable'>";
echo "<thead>";
$results = array();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$results[] = $row;
}
echo "<tr>";
echo "<th>" . 'Nr' . "</th>";
for($x=0;$x<$spalten;$x++){
$column[$x] = array_column($results, $fields[$x]->name); // puts all existing values of a column into the field-name
if(array_filter($column[$x])) { // displays only those columns with at least one value in it
$key = array_search($fields[$x], $custom_column_arr);
if($key !== false){
echo "<th>" . $key . "</th>";
}else{
echo "<th>" . $fields[$x] . "</th>";
}
}
}
echo "</tr></thead>";
echo "<tbody>";
$nr = 1;
$stmt = $pdo->query($sql);
// $result = mysqli_query($db, $sql);
while ($row = $stmt->fetch(PDO::FETCH_NUM)) {
echo "<tr>";
echo "<td>" . $nr . "</td>";
for ($k=0; $k<$spalten; $k++) { // goes around until there are no columns left
$column[$k] = array_column($results, $fields[$k]->name); // puts all existing values of a column into the field-name
if(array_filter($column[$k])) { // displays only those columns with at least one value in it
echo "<td>" . $row[$k] . "</td>"; //Prints the data
}
}
echo "</tr>";
$nr = $nr + 1;
} // Ende der while-Schleife
echo "</tbody></table>";
}
}
mysqli_close($db);
Klappt soweit ganz gut und zeigt alles an, was angezeigt werden soll. Nur das Nicht-Darstellen von leeren Spalten, das unter mysqli geklappt hat, funktioniert noch nicht. Nehme mal an, dass es daran liegt, dass der Wechsel von $result = mysqli_query($db, $sql); zu $stmt = $pdo->query($sql); (oberhalb der while-Zeile) nicht korrekt war. Habe es auch mit $stmt->execute(); versucht, jedoch mit gleichem Ergebnis.
Hat jemand einen Tipp für mich, wie ich hier weiterkomme?
Herzlichen Dank!
Kommentar
-
Aso ja, hab vergessen anzugeben: $fields = explode(', ', $selection); Also zeige ich eh automatisch die ausgelesenen Spalten an.
Aber für das Nicht-Anzeigen von leeren Spalten musste ich in mysqli die Ergebnisse mit $result = mysqli_query($db, $sql); vor dem Anzeigen der einzelnen Zeilen noch einmal abfragen.
Wie mache ich das nun in PDO?
Kommentar
-
Naja, aber das war ja in mysqli auch der Fall, also da war ja in $result auch der gesamte Datensatz drin und ich musste es für diese spezielle Funktion vor dem Anzeigen der Zeilen noch einmal abfragen. Und in PDO klappt es ohne eine nochmalige Abfrage gar nicht, also dann werden nur die Überschriften angezeigt und mit $stmt = $pdo->query($sql); oder $stmt->execute(); bekomme dann auch die Zeilen, jedoch auch die Spalten, die komplett leer sind.
Kommentar
Kommentar