» MySQL Abfrage wie in der Konsole formatiert ausgeben

Domain Namen ermitteln (in URL bzw Hostnamen)Neuen Thread eröffnenNeue Antwort erstellenProxyPass funktioniert nicht in .htaccess - PHP Proxy als Lösung
AutorNachricht
Administrator 

Name: Marc
Geschlecht:
Anmeldedatum: 28.08.2004
Beiträge: 52423
Wohnort: Lohmar


Meine eBay-Auktionen:
07.02.2017, 22:44
zitieren

Gerade wenn man in Foren Ergebnisse teilen möchte, bietet sich ein formatiertes Ergebnis einer Datenbankabfrage an:
mysql> select * from users;
+-----------+------------+-------+
| firstname | city       | zip   |
+-----------+------------+-------+
| Maria     | Holland    | 12345 |
| Rene      | Doylestown | 65432 |
| Helen     | Conway     | 98745 |
+-----------+------------+-------+
3 rows in set (0.01 sec)

Leider bekommt man so eine schön formatierte Ausgabe nur über die Konsole. Daher habe ich das ganze direkt in PHP umgesetzt wie folgt:
<pre>
<?php
$db = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');
$start = microtime(true);
$sql = "SELECT * FROM myTable";
$result = mysqli_query($db, $sql);
$exec_time = microtime(true) - $start;
// obtain the maximum string length of all column headings and rows
$colwidths = array();
while ($row = mysqli_fetch_assoc($result)) {
    foreach ($row as $key => $value) {
        // heading
        if (!isset($colwidths[ $key ])) {
            $colwidths[ $key ] = strlen($key) + 2;
        }
        // rows
        $colwidths[ $key ] = max($colwidths[ $key ], strlen($value) + 2);
    }
}
echo 'mysql>' . trim($sql) . PHP_EOL;
// SELECT, SHOW, DESCRIBE, EXPLAIN = resource
// INSERT, UPDATE, DELETE, DROP = true
// Error = false
if (!is_bool($result)) {
    if ($colwidths) {
        mysqli_data_seek($result, 0);
        while ($row = mysqli_fetch_assoc($result)) {
            // create and display horizontal line and column headings
            if (!isset($header)) {
                $header = '| ';
                $line = '+';
                foreach ($row as $key => $value) {
                    $line .= str_repeat('-', $colwidths[ $key ] + 2) . '+';
                    $header .= str_pad($key, $colwidths[ $key ]) . ' | ';
                }
                echo $line . PHP_EOL;
                echo $header . PHP_EOL;
                echo $line . PHP_EOL;
            }
            // display row values
            foreach ($row as $key => $value) {
                echo '| ' . str_pad($value, $colwidths[ $key ] + 1);
            }
            echo '|' . PHP_EOL;
        }
        echo $line . PHP_EOL;
    }
    mysqli_free_result($result);
}
$affectedrows = mysqli_affected_rows($db);
if ($result === false) {
    echo PHP_EOL . 'ERROR ' . mysqli_errno($db) . ': ' . mysqli_error($db);
}
else if ($result === true) {
    echo 'Query OK, ' . $affectedrows . ' rows affected (' . round($exec_time / $iterations * 1000) . ' ms)';
}
else if ($affectedrows) {
    echo $affectedrows . ' rows in set (' . round($exec_time / $iterations * 1000) . ' ms)';
}
else {
    echo 'Empty set (' . round($exec_time / $iterations * 1000) . ' ms)';
}
?>
</pre>

Die Zeile wird wie in der Kommandozeile ausgegeben mit Ausgabe der Tabelle, die man in
<pre>
-Tags ausgeben sollte, damit sie sich nicht verschieben. Außerdem erfolgt im Fuß die Zusammenfassung mit der Zeitangabe (ich habe mich für Millisekunden entschieden) und selbst bei Fehlern erfolgt die Ausgabe der Meldung, wie es auch bei der Konsole der Fall wäre.

Beispiele

SELECT:
mysql>SELECT
topic_id,
MATCH(text) AGAINST('tuning') AS score
FROM
topics
WHERE
MATCH(text) AGAINST('tuning' IN BOOLEAN MODE)
ORDER BY
score DESC
LIMIT 10
+----------+--------------------+
| topic_id | score              |
+----------+--------------------+
| 153257   | 5.161948204040527  |
| 17925    | 4.781417369842529  |
| 66459    | 4.648380279541016  |
| 373176   | 4.570812702178955  |
| 117173   | 4.55166482925415   |
| 167016   | 4.462575912475586  |
| 183286   | 4.4519267082214355 |
| 366132   | 4.348565101623535  |
| 95502    | 4.293642520904541  |
| 29615    | 4.178250789642334  |
+----------+--------------------+
10 rows in set (141 ms)

Fehler:
mysql>SELECT * WHERE 1=1

ERROR 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE 1=1' at line 1

UPDATE:
mysql>UPDATE topics SET text = 'Hello World!' WHERE topic_id = 2
Query OK, 1 rows affected (1 ms)


pn email
Gast 
07.02.2017, 22:44
zitieren

Mach mit!

Wenn Dir die Beiträge zum Thread "MySQL Abfrage wie in der Konsole formatiert ausgeben" gefallen haben oder Du noch Fragen hast oder Ergänzungen machen möchtest, solltest Du Dich gleich bei uns anmelden:



Registrierte Mitglieder genießen die folgenden Vorteile:
✔ kostenlose Mitgliedschaft
keine Werbung
✔ direkter Austausch mit Gleichgesinnten
✔ neue Fragen stellen oder Diskussionen starten
✔ schnelle Hilfe bei Problemen
✔ Bilder und Videos hochladen
✔ und vieles mehr...


Neuen Thread eröffnenNeue Antwort erstellen
Ähnliche BeiträgeRe:
Letzter Beitrag
Bräuchte da mal hilfe - DB-Abfrage
Hi leuz. Ich bin grad dabei nen Browsergame zu coden. Es geht im groben um Autorennen. Nun hab ich ein Problem mit der einberechnung der Tuningteile. Er berechnet die Teile einfach nicht mit zu den standardwerten dazu. Der Code sieht wiefolgt...
[PHP]von PreludeBA4
4
502
27.02.2009, 11:34
PreludeBA4
Teilenummer abfrage wer Kennt des teil
Hallo Freunde meine Frage ist arbeitet jemand bei einem VW Autohaus und kann mir bitte sagen zu welchem Auto die Teile gehören hab nehmlich die zwei endtöpfe Geschenk bekommen und soll damit machen was ich will also dachte ich mir ich Verkauf die da ich...
von Giova
0
407
28.05.2011, 08:10
Giova
Abfrage, ob Seite zur Zeit in Printversion vorliegt
Hi Leute :D ich möchte meiner Druckversion ein anderes Layout geben, als meiner üblichen Seite. Dazu muss ich in meiner PHP, die die Seite erstellt eine Abfrage einbauen, die kontrolliert ob printable=yes zutrifft. Dabei wollte ich vermeiden, die URL...
von tichan64
1
83
25.08.2013, 16:06
mgutt
Smartphone PIN Abfrage zu Hause (WLAN) abschalten mit Safe Areas
Ich möchte mein Smartphone absichern. Dazu nutze ich entweder die Muster- oder die PIN-Sperre. Zu Hause erscheint beides recht sinnfrei. Hier brauche ich keinen Schutz. Daher habe ich mir mit dieser App...
von mgutt
1
443
22.11.2013, 15:38
mgutt
C Listenelemente ausgeben
Hallo, ich habe Probleme damit, ein Programm fertigzustellen, welches das x-te Listenelement ausgeben soll. Vielleicht hat jemand von euch einen besseren Ansatz oder gute Ratschläge. Mein Code ist bisher...
[C]von Luchs11
3
245
29.05.2020, 17:27
steinsgate
Array Ausgeben
Hi Leute, habe gerade folgenden Code verfasst... public class Array { public static void changeArray(int[] array) { for(int i= 0; i < array.length; i++) { if(array[i] % 2==0) { array[i]= array[i]*-1; } else { array[i]=array[i]*10; } } } public static...
[Java]von DeppJonez
1
387
01.02.2017, 19:42
angemon
Was würdet ihr für nen Ep3 ausgeben
Hallo, bei meinen Honda Händler in der nähe steht nen R. Hat ca. 80-90tkm gelaufen, Baujahr 2004, glaube erste Hand, Farbe schwarz. Optisch in Ordnung. Was würdet ihr dafür hinlegen, der ist die Tage erst frisch reingekommen und preislich stand da...
von untermieter83
11
661
19.12.2009, 13:28
untermieter83
sagt mal bitte was ihr max. ausgeben würdet!
http://www.autoscout24.de/Details.aspx?id=bzhvsus3gfjv Gruß Tom...
von nfs_freak
19
456
21.04.2009, 09:34
CHJazz
HTML Befehle als Text ausgeben
Hallo, ich würde gern in meinen Wiki HTML, CSS Tags einbauen, welche dann direkt ausgegeben werden. Zum Beispiel soll das Wiki <br> anzeigen oder halt<p>. Das Wiki zeigt es aber nicht, sondern verarbeitet es natürlich gleich. Ich habe schon...
von pahiti78
2
163
23.05.2014, 12:37
pahiti78
Was würdet ihr für meinen Preluden ausgeben??????
Hey Leute! Ich denke mit 28 langsam über Familie nach! Das ist beim Honda Prelude ( BB9 ) ein bisschen fehl am Platz! Keine Angst, ich bleibe bei Honda. Es wird wohl ein Accord! Ein paar Eckdaten zu meinen Luden: Erstzulassung:1998, jetzt 203000 km,...
von gigi82
8
466
17.03.2010, 19:18
RaZeR86
© 2004 - 2025 www.programmierer-forum.de | Communities | Impressum |