Umstellung Abfrage und Ausgabe von MySql auf MySqli

Fonsi-Heizer

Mitglied
Hallo Leute!

Da meine Datenbankabfragen noch immer auf mysql laufen und ich diese aufgrund der Zukunft auf mysqli umstellen möchte habe ich folgende Fragen zu meiner Abfrage und Ausgabe.

PHP:
<?php
$result = mysqli_query("SELECT a.ordering AS Nr, a.first_name AS Vorname, a.last_name AS Nachname, s.translation AS 'Status*', DATE(a.date) AS Datum, (SELECT f.value AS Club FROM zo0vf_seminarman_fields_values f WHERE f.applicationid = a.id AND field_id = 5) AS Stadt, (SELECT f.value AS Club FROM zo0vf_seminarman_fields_values f WHERE f.applicationid = a.id AND field_id = 6) AS Land, (SELECT f.value AS Club FROM zo0vf_seminarman_fields_values f WHERE f.applicationid = a.id AND field_id = 19) AS 'Gruppe*' FROM zo0vf_seminarman_application a inner join zo0vf_seminarman_status s on a.status = s.uid order by a.ordering");

$fields_num = mysqli_field_count($result);

echo "<div class='demo-container'><table class='footable'>";

echo'<thead><tr class="footable-detail-show"><th class="footable-first-column footable-sortable footable-sorted" data-type="numeric">Nr <span class="footable-sort-indicator"></span></th><th class="footable-sortable">Vorname <span class="footable-sort-indicator"></span></th><th class="footable-sortable">Nachname <span class="footable-sort-indicator"></span></th><th class="footable-sortable" data-hide="phone">Status <span class="footable-sort-indicator"></span></th><th class="footable-sortable" data-hide="phone, tablet">Datum <span class="footable-sort-indicator"></span></th><th class="footable-sortable" data-hide="phone, tablet">Stadt <span class="footable-sort-indicator"></span></th><th class="footable-sortable" data-hide="phone">Land <span class="footable-sort-indicator"></span></th><th class="footable-last-column footable-sortable" data-hide="phone">Gruppe* <span class="footable-sort-indicator"></span></th></tr></thead>';


echo'<tbody>';
while($data = mysqli_fetch_array($result))

{

echo'<tr>';

echo '<td>'.$data['Nr'].'</td><td>'.$data['Vorname'].'</td><td>'.$data['Nachname'].'</td><td>'.$data['Status*'].'</td><td>'.$data['Datum'].'</td><td>'.$data['Stadt'].'</td><td>'.$data['Land'].'</td><td>'.$data['Gruppe*'].'</td>';

echo'</tr>';

}

echo "</tbody></table></div>";

?>

Wie Ihr im Code seht, habe ich die mysql Befehle auf mysqli geändert, jedoch erhalte ich nur eine leere Tabelle.

Die Verbindung von Joomla zur Datenbank wurde schon auf mysqli umgestellt.

Danke
 
Sodala, mittlerweile bin ich schon ein paar Schritte höchst wahrscheinlich weiter!

Aber leider passen meine Syntax-Abfragen im Bereich SELECT, AS und WHERE nicht mehr mit mysqli zusammen.

PHP:
SELECT a.ordering AS Nr, a.first_name AS Vorname, a.last_name AS Nachname, s.translation AS 'Status*', DATE(a.date) AS Datum, (SELECT f.value AS Club FROM zo0vf_seminarman_fields_values f WHERE f.applicationid = a.id AND field_id = 5) AS Stadt, (SELECT f.value AS Club FROM zo0vf_seminarman_fields_values f WHERE f.applicationid = a.id AND field_id = 6) AS Land, (SELECT f.value AS Club FROM zo0vf_seminarman_fields_values f WHERE f.applicationid = a.id AND field_id = 19) AS 'Gruppe*' FROM zo0vf_seminarman_application a inner join zo0vf_seminarman_status s on a.status = s.uid order by a.ordering"

Jemand eine Lösung was ich hierbei noch hinzufügen, ändern oder löschen muss?

PHP:
<?php
// Verbinden
$mysqli = new mysqli('localhost','xxx','xxx','xxx');

if(!mysqli) {
    die('Verbindung zur Datenbank nicht möglich.');
}

// Abfragen
$sql = $mysqli -> real_escape_string("SELECT a.ordering AS Nr, a.first_name AS Vorname, a.last_name AS Nachname, s.translation AS 'Status*', DATE(a.date) AS Datum, (SELECT f.value AS Club FROM zo0vf_seminarman_fields_values f WHERE f.applicationid = a.id AND field_id = 5) AS Stadt, (SELECT f.value AS Club FROM zo0vf_seminarman_fields_values f WHERE f.applicationid = a.id AND field_id = 6) AS Land, (SELECT f.value AS Club FROM zo0vf_seminarman_fields_values f WHERE f.applicationid = a.id AND field_id = 19) AS 'Gruppe*' FROM zo0vf_seminarman_application a inner join zo0vf_seminarman_status s on a.status = s.uid order by a.ordering");
if($result = $mysqli -> query($sql)) {
    echo "<div class='demo-container'><table class='footable'>";
    echo'<thead><tr class="footable-detail-show"><th class="footable-first-column footable-sortable footable-sorted" data-type="numeric">Nr <span class="footable-sort-indicator"></span></th><th class="footable-sortable">Vorname <span class="footable-sort-indicator"></span></th><th class="footable-sortable">Nachname <span class="footable-sort-indicator"></span></th><th class="footable-sortable" data-hide="phone">Status <span class="footable-sort-indicator"></span></th><th class="footable-sortable" data-hide="phone, tablet">Datum <span class="footable-sort-indicator"></span></th><th class="footable-sortable" data-hide="phone, tablet">Stadt <span class="footable-sort-indicator"></span></th><th class="footable-sortable" data-hide="phone">Land <span class="footable-sort-indicator"></span></th><th class="footable-last-column footable-sortable" data-hide="phone">Gruppe* <span class="footable-sort-indicator"></span></th></tr></thead>';
    while($row=$result->fetch_array(MYSQLI_ASSOC)) {
     echo'<tbody>';
     echo
        "<tr>
            <td>".$row['Nr']. "</td>
            <td>".$row['Vorname']. "</td>
            <td>".$row['Nachname']. "</td>
            <td>".$row['Status']. "</td>
            <td>".$row['Datum']. "</td>
            <td>".$row['Stadt']. "</td>
            <td>".$row['Land']. "</td>
            <td>".$row['Gruppe']. "</td>
        </tr>";
    }
    echo "</tbody></table></div>";
} else {
    echo 'Fehler ('.$mysqli -> sqlstate.'): '.$mysqli -> error;
}
?>

Danke
 
Nein, habe nur eine Vorlage im Internet gefunden wo dieser Befehl schon drinnen ist, deshalb wurde dies verwendet!

Gibt es einen Ansatz, wo ich an der Schraube drehen muss?
 
Vergiss diese Vorlage ganz schnell, und escape "nicht" die ganze Abfrage.
Das ist nicht dazu gedacht, so noch zu funktionieren.

Bzw., da die ganze Abfrage keinen Usereingaben etc. hat, escape gar nichts.
Und falls irgendwo Usereingaben dazukommen: Prepared Statements.
 
Hallo sheel! Danke für deine Antwort. Habe die Vorlage schon längst wieder vergessen.

Habe mich nun mit meiner Ausgangsabfrage und Ausgabe beschäftigt.
Und siehe da, wenn man die Doku liest und richtig versteht und ein wenig rumprobiert habe ich auch schon die Lösung gefunden:


PHP:
$dblink = new mysqli("localhost", "xxx", "xxx", "xxx");
$result = mysqli_query($dblink, "SELECT

Und des weiteren auch noch hier:

PHP:
$fields_num = mysqli_field_count($result, dblink);
PHP:
while($data = mysqli_fetch_assoc($result))

Jetzt gibt die Abfrage auch wieder alle Daten aus. Leider aber werden alle Umlaute mit einem ? angezeigt? UTF-8 Codierung wahrscheinlich

Dieser Code funktioniert jedoch nicht um die Umlaute richtig darzustellen?


PHP:
if (!mysqli_set_charset($mysqli, "utf8")) {
    printf("Error loading character set utf8: %s\n", mysqli_error($mysqli));
} else {
    printf("Current character set: %s\n", mysqli_character_set_name($mysqli));
}
 
Zuletzt bearbeitet:
Wird beim Charset-Umstellen die Fehlermeldung ausgegeben (Error loading character set...)
oder funktioniert das Umstellen selber, hilft nur nicht?

Welches Charset hat die DB-Tabelle?

Wann rufst du die Charsetfunktion auf (zeitlich zwischen welchen anderen Mysqli-Funktionen)?

Als welches Charset wird die Ausgabe zum Browser geliefert?
Hast du da eine eigene Einstellung (header(), htaccess...) oder einfach gar nichts?

Enthält der HTML-Code ein <meta>-Ding fürs Charset?

Letztendlich, welches Charset denkt der Browser zu haben?
(je nach Browser unterschiedlich, wo man das sieht...)
 
Keine Fehlermeldung!

DB-Tabelle: MySQL-Zeichensatz: UTF-8 Unicode (utf8) / utf8_general_ci

Keine eigene Header Einstellung

Laut Meta Tag sollte dieser schon einen UTF-8 haben.

Habe Firefox und laut der Seiteninformation ist diese auf UTF-8!

LG
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück