Hallo, Gast
Du musst dich registrieren bevor du auf unserer Seite Beiträge schreiben kannst.

Benutzername
  

Passwort
  





Durchsuche Foren

(Erweiterte Suche)

Foren-Statistiken
» Mitglieder: 1
» Neuestes Mitglied: Joopi
» Foren-Themen: 452
» Foren-Beiträge: 628

Komplettstatistiken

Benutzer Online
Momentan sind 8 Benutzer online
» 0 Mitglieder
» 4 Gäste
AhrefsBot, Crawl, Facebook, bot

Aktive Themen
Wednesday - 16:00 CDT: No...
Forum: Wetter in Little Rock
Letzter Beitrag: Joopi
Vor 3 Stunden
» Antworten: 0
» Ansichten: 1
Wednesday - 12:00 CDT: No...
Forum: Wetter in Little Rock
Letzter Beitrag: Joopi
Vor 7 Stunden
» Antworten: 0
» Ansichten: 0
Zahnverzapfung herstellen...
Forum: Antiheimwerker
Letzter Beitrag: Joopi
Vor 9 Stunden
» Antworten: 0
» Ansichten: 0
Holzdübel bei Gehrung set...
Forum: Antiheimwerker
Letzter Beitrag: Joopi
Vor 9 Stunden
» Antworten: 0
» Ansichten: 0
Abrichten mit der Ober-/K...
Forum: Antiheimwerker
Letzter Beitrag: Joopi
Vor 9 Stunden
» Antworten: 0
» Ansichten: 0
Wednesday - 10:00 CDT: No...
Forum: Wetter in Little Rock
Letzter Beitrag: Joopi
Vor 9 Stunden
» Antworten: 0
» Ansichten: 0
Wednesday - 05:00 CDT: No...
Forum: Wetter in Little Rock
Letzter Beitrag: Joopi
Gestern, 01:48
» Antworten: 0
» Ansichten: 0
Tuesday - 23:00 CDT: Not ...
Forum: Wetter in Little Rock
Letzter Beitrag: Joopi
Gestern, 08:23
» Antworten: 0
» Ansichten: 2
Tuesday - 18:00 CDT: Not ...
Forum: Wetter in Little Rock
Letzter Beitrag: Joopi
Gestern, 03:24
» Antworten: 0
» Ansichten: 1
Tuesday - 14:00 CDT: Not ...
Forum: Wetter in Little Rock
Letzter Beitrag: Joopi
17-09-2024, 11:31
» Antworten: 0
» Ansichten: 1

 
  Tabelle kopieren
Geschrieben von: Joopi - 07-01-2023, 10:08 - Forum: Programmieren - Keine Antworten

Mit nachstehenden MySQL-Befehlen lässt sich eine Tabelle recht einfach in eine andere Datenbank kopieren. In diesem Beispiel werden die Daten von db1 in db2 kopiert.

Zunächst muss die neue Tabelle (mit gleicher Struktur) erstellt werden:

Code:
CREATE TABLE db2.newTable LIKE db1.oldTable;

Danach können die Daten in die neue Tabelle kopiert werden:

Code:
ALTER TABLE db2.newTable DISABLE KEYS;

Code:
INSERT INTO db2.newTable SELECT * FROM db1.oldTable;

Code:
ALTER TABLE db2.newTable ENABLE KEYS;

Drucke diesen Beitrag

  Tabelle create
Geschrieben von: Joopi - 07-01-2023, 10:07 - Forum: Programmieren - Keine Antworten

Sofern ich Tabellen auf der Konsole anlege, benutze ich folgenden Befehl:

Code:
CREATE TABLE tabelle (
id integer NOT NULL auto_increment,
text varchar(30) NOT NULL,
beschreibung text NOT NULL,
erfasst datetime NOT NULL,
geaendert timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
primary key(id)) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Diese Darstellung ist nur exemplarisch. Wichtig sind für mich die beiden Felder mit Datumsangaben.

Drucke diesen Beitrag

Information Select verstehen und richtig anwenden
Geschrieben von: Joopi - 07-01-2023, 10:05 - Forum: Programmieren - Keine Antworten

Man lernt in der Tat nie aus und immer wieder was neues. Aus allen Lehrbüchern, die ich zu MySQL und/oder PHP gelesen habe, wurde noch nie vermittelt, dass der Befehlsteil SELECT * FROM so in der Form nie verwendet werden soll. Mit dieser Anweisung werden alle Spalten einer Tabelle in die Abfrage aufgenommen, egal, ob sie dann auch genutzt werden oder nicht.

Da selbst die Doku von MySQL diese Schreibweise nutzt, später aber aussagt, dass man es nie in echten Programmen tun soll, haben wohl viele Autoren diese Vereinfachung übernommen. Man soll tatsächlich explizit alle in der Abfrage notwendigen Spalten angeben. Warum das so sein soll, habe ich nach dem Lesen des folgenden Artikels verstanden:

Warum soll ich nicht SELECT * schreiben?

Meine Programme sind zwar klein, und die Tabellenabfragen sind eher einfach, aber ich werde in Zukunft schon darauf achten, die tatsächlich zu nutzenden Spalten in die SELECT-Anweisung aufzunehmen.

Drucke diesen Beitrag

  Letzten Datensatz ermitteln
Geschrieben von: Joopi - 07-01-2023, 10:03 - Forum: Programmieren - Keine Antworten

Dann und wann ist es notwendig, den letzten Datensatz einer Tabelle zu ermitteln. Meist ist es die ID aus einem Autowert-Feld.

Die einfachste Methode ist eine SELECT-Abfrage mit LIMIT 1 und einer Sortierung mit DESC (aufwärts).

Code:
SELECT id FROM tabelle ORDER BY id DESC LIMIT 1;

Diese Methode funktioniert natürlich in allen Scripten entsprechend, die eine Verbindung zu einer MySQL-Datenbank aufbauen können. Im vorliegenden Beispiel benötigte ich den letzten Datensatz eben in einem Shellscript.



Code:
lastid=($(mysql -u $user -h $server --password="$pw" $db -e "SELECT id FROM $tabelle1 ORDER BY id DESC LIMIT 1";))

Drucke diesen Beitrag

  Installation und Rootpasswort
Geschrieben von: Joopi - 07-01-2023, 09:57 - Forum: Programmieren - Keine Antworten

Irgendwie komme ich bei Neuinstallationen immer wieder in Konflikt mit dem Rootpasswort für MariaDB oder MySQL.

Heute, am 01.01.2022, hatte ich versucht, in einer virtuellen Maschine (VirtualBox) einen MariaDB-Server aufzusetzen. Das hat nicht funktioniert. Das Setzen des Rootpassworts wollte nicht gelingen. Dabei fiel mir erst später auf, dass MariaDB gar nicht gestartet worden war. Es gelang mir auch nicht, MariaDB zum Laufen zu bekommen.

Kurzerhand entschied ich mich das gute alte MySQL zu installieren. Das ging sehr gut.

Folgende Befehle setzte ich ab:

Code:
sudo apt-get install mysql-server mysql-client

Code:
sudo mysql_secure_installation

Bei diesem Befehl hatte MariaDB eine Fehlermeldung ausgegeben. MySQL lief schön durch und ich konnte das Rootpasswort setzen. Doch eine Anmeldung in der Konsole wollte nur gelingen, wenn ich die Anmeldung als Sudo-User vornahm. Das hatte auch den Nachteil, dass ich mich über Adminer im Browser nicht anmelden konnte.

Der Workaround hierzu ist sehr gut auf der folgenden Webseite beschrieben:

can't login as mysql user root from normal user account in ubuntu 16.04

In der Kurzform für mich sind folgende Befehl abzuarbeiten, um dem MySQL-User root wieder normal funktionsfähig zu machen.

Der Sudo-User loggt sich in die MySQL-Konsole ein:

Code:
sudo mysql -u root -h localhost -p

Sodann überprüft er, wie der MySQL-User root in der entsprechenden Tabelle der Datenbank mysql steht:

Code:
SELECT User,Host FROM mysql.user;

Der User root ist dann zu löschen:

Code:
DROP USER 'root'@'localhost';

Der User root ist dann neu anzulegen:

Code:
CREATE USER 'root'@'localhost' IDENTIFIED BY 'passwort';

Die komplette Latte an Rechten ist dem User root zu vergeben:

Code:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;

Und dann sind die neuen Berechtigungen sofort auszurollen:

Code:
FLUSH PRIVILEGES;

Danach konnte ich mich auf der Konsole als normaler User und Passwort nach MySQL einloggen und in Adminer konnte ich mich auch einloggen mit dem User root und dem neuen Passwort.

Adminer kann nur genutzt werden, wenn der User root ein Passwort hat. Das nur am Rande erwähnt.

Drucke diesen Beitrag

  Fehlerbehandlung
Geschrieben von: Joopi - 07-01-2023, 09:51 - Forum: Programmieren - Keine Antworten

Wenn über ein HTML(PHP)-Formular Daten in eine Tabelle geschrieben werden sollen, dann sollte auch eine Fehlerbehandlung erfolgen.

Mit diesem Code-Schnipsel kann man die Fehlermeldung und die Fehlernummer anzeigen lassen, die ausgegeben werden, wenn es zu einem Fehler kommen sollte. Der Datensatz sollte dann auch nicht in der Tabelle erscheinen.

PHP-Code:
if(mysqli_error($db)) {
    echo 
"<p>Das ist der Fehler: " mysqli_error($db) . " und der Fehlercode:" mysqli_errno($db) . "</p>";
    echo 
"<a href=\"mail_add.php\"><img border=\"0\" src=\"header_button3.php?text=Mailaddi&font=4\"></a>\n";


Die Prüfung erfolgt über die Datenbankverbindugn **\$db**. Die Fehlerausgabe erfolgt mit Klartext und mit Fehlernummer.

Drucke diesen Beitrag

  Datensätze aller Tabellen in der Datenbank
Geschrieben von: Joopi - 07-01-2023, 09:49 - Forum: Programmieren - Keine Antworten

Wenn man wissen will, wie viele Datensätze in den diversen Tabellen einer Datenbank enthalten sind, kann man das mit einem Befehl ermittlen:

Code:
SELECT table_name, table_rows FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'datenbankname';

Drucke diesen Beitrag

  Datenbank erstellen
Geschrieben von: Joopi - 07-01-2023, 09:48 - Forum: Programmieren - Keine Antworten

Sofern ich Datenbanken auf der Konsole anlege, benutze ich folgenden Befehl:

Code:
CREATE DATABASE datenbankname DEFAULT CHARACTER SET utf8 COLLATE utf8mb4_general_ci;

Drucke diesen Beitrag

  Daten erfassen
Geschrieben von: Joopi - 07-01-2023, 09:47 - Forum: Programmieren - Keine Antworten

Es gibt zwei gute Möglichkeiten, um Datensätze in eine MySQL-Tabelle zu erfassen. Über **INSERT INTO** kann man entweder die **Values**-Variante nehmen (die Erfassung mehrerer Datensätze ist möglich) oder mit **SET** (es kann nur ein Datensatz erfasst werden).

Zwei Varianten der Datenerfassung:

Code:
mysql> INSERT INTO tabelle (nname, vname, erfassung) VALUES ("Mustermann","Klaus",NOW());

Code:
mysql> INSERT INTO tabelle SET nname="Mustermann", vname="Klaus", erfassung=NOW();


Erklärung:

Wie bereits oben erwähnt ist die SET-Variante ausschließlich für die Erfassung eines einzelnen Datensatzes vorgesehen. Insbesondere Neulinge, die die Syntax von MySQL noch nicht so gut beherrschen, sollten sich in der ersten Zeit mit dieser Anweisung begnügen. Ich spreche da aus Erfahrung.

Update:

Die obige Erklärung habe ich vor ca. 15 Jahren geschrieben. Heute kann ich darüber lachen. Aber wenn man von der Thematik keine Ahnung hat, dann sind die einfachen Formen der Handhabung immer noch die besten. Heutzutage kommt es produktiv nicht mehr vor, dass ich Datensätze via Konsolenbefehl in die Tabellen erfasse. Wenn ich etwas teste, dann kann das vorkommen.

Drucke diesen Beitrag

  Bestimmte Anzahl von Zeichen ausgeben
Geschrieben von: Joopi - 07-01-2023, 09:44 - Forum: Programmieren - Keine Antworten

Eine Tabelle mit einem Fließtext als Feldinhalt ist nicht besonders schön. Sofern der Text nicht maßgeblich ist, sondern nur als Füllmenge gedacht ist, macht es Sinn, die Ausgabe des Textes auf eine gewisse Anzahl Zeichen zu begrenzen. In einem SQL-Statement könnte das wie folgt aussehen:

Code:
$erg = mysqli_query($db, "SELECT id, substring(mailtext,1,250) FROM tabelle ORDER BY id");

Damit werden ab Zeichen 1 entsprechend viele Zeichen des Textes, sofern vorhanden, ausgegeben. Der Rest wird nicht angezeigt.

Dieser Teil des Statements ist der wichtig Teil:

Zitat:substring(mailtext,1,250)

Somit kann man Tabellen auch mit dem Feld für Fließtext füllen, um dem Betrachter dieses zu zeigen.

Es macht Sinn, daraus einen Teaser zu generieren, sodass vielleicht ein Link angesetzt werden kann, um den gesamten Text anzeigen zu lassen.

Drucke diesen Beitrag