Antworten auf deine Fragen:
Neues Thema erstellen

umstellung mysql auf msqli

strichcode

Nicht mehr ganz neu hier

Hallo Ihr Lieben.

Ich habe folgende Fehlermeldung auf meinen Seiten:

Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in

Also würde ich diese Umstellung jetzt gerne vornehmen.

Ein, wie im Internet vorgeschlagenes "i" an mysql anzuhängen bringt mir leider nicht das gewüschte Ergebnis. Sondern es kommt zu dieser Fehlermeldung:
mysqli_select_db() expects exactly 2 parameters, 1 given in
Könnt Ihr mir dabei helfen, meine Scripte umzustellen?

Ein Stück von meinem bisherigen Script sieht so aus:

PHP:
// Fehler unterdrücken
error_reporting(E_ALL);

// Verbindung aufbauen, auswählen einer Datenbank
$mysql_host = "xxx";
$mysql_user = "yyy";
$mysql_password = "zzz";
$mysql_db = "db123";


$dbh = mysql_connect($mysql_host, $mysql_user, $mysql_password)
  or die("Keine Verbindung möglich: " . mysql_error());

mysql_select_db($mysql_db) or die("Auswahl der Datenbank fehlgeschlagen");

$abfrage = "SELECT * FROM Tabelle WHERE Nummer LIKE '123'";
$ergebnis = mysql_query($abfrage);

while ($daten = mysql_fetch_array( $ergebnis, MYSQL_ASSOC)) {
  echo '

Mein Versuch nach einigem gegoogle es zu ändern:
PHP:
// Fehler unterdrücken
error_reporting(E_ALL);

// Verbindung aufbauen, auswählen einer Datenbank
$mysql_host = "xxx";
$mysql_user = "yyy";
$mysql_password = "zzz";
$mysql_db = "db123";

$dbh = @new mysqli($mysql_host, $mysql_user, $mysql_password)
    or die("Keine Verbindung möglich: " . mysql_error());

mysqli_select_db($mysql_db) or die("Auswahl der Datenbank fehlgeschlagen");

$abfrage = "SELECT * FROM Tabelle WHERE Nummer LIKE '00380100'";
$ergebnis = $dbh->query($abfrage);

while ($daten = mysql_fetch_array( $ergebnis, MYSQL_ASSOC)) {
     echo '
gibt diese Fehlermeldung:
mysqli_select_db() expects exactly 2 parameters, 1 given in line 14

Könnt Ihr mir helfen?
(Große Grundlagen sind leider nicht vorhanden, ich bin froh es bis hierhin geschafft zu haben)

Vielen Dank schonmal
Heike
 

Dudlhofer

Aktives Mitglied

kann es sein, das 'mySQLI' eine andere dBase, als '$mysql_db' erwartet...?

Nein, mysqli ist lediglich die Methode mit der PHP die Datenbank anspricht und hat nichts mit der eigentlichen Datenbank zu tun.

mysqli_select_db erwartet den Datenbanknamen als 2. Parameter und im ersten den Link auf das Datenbank-Objekt.

Code:
bool mysqli_select_db ( mysqli $link , string $dbname )

Der Befehl ist aber nur nötig, wenn man zwischen verschiedenen DBs wechseln will - wenn nur 1 DB verwendet wird, genügt mysqli_connect().
 

strichcode

Nicht mehr ganz neu hier

Lieben Dank, daß Ihr mir helfen wollt. (und auch noch so schnell) ;-)

Also: wenn ich, wie Winne52 vorschlägt ein i anfüge
while ($daten = mysqli_fetch_array( $ergebnis,..

ändert sich nichts. Ich hatte auch als erstes per Suchen/Ersetzen überall ein i angefügt, aber soo einfach ist das Leben wohl nicht.

Und zu dem was Dudlhofer schreibt:
Das verstehe ich nicht. Den Datenbank namen gebe ich doch an?
Und was ist der Link auf das Datenbank-Objekt?

In diesem Projekt wechsele ich die Datenbank nicht. Es gibt allerdings ein anderes, größeres Projekt, dort frage ich zwei Datenbanken ab. Das größere Projekt würde ich mir dann als nächstes vornehmen, weil diese msqli-Umstellung wegen höherer PHP-Versionen unseres Providers wohl zwangsläufig auf mich zu kommt.

Danke für Eure Geduld.
 

Dudlhofer

Aktives Mitglied

Sorry, wenn das unverständlich war. Also: Du machst mit dem "new mysqli()..." ja bereits die erfolgreiche Datenbankverbindung auf. Der nachfolgende mysqli_select_db()-Befehl ist überflüssig - Du kannst ihn mMn einfach weglassen. Wenn's noch nicht klappt, schau'n wir weiter... :)
 

strichcode

Nicht mehr ganz neu hier

Das unverständliche liegt wohl nicht an Dir, da würd ich den Fehler eher bei mir suchen. ;-)

Aber wenn ich die Zeile ganz lösche, dann gibt es nun
mysql_fetch_array() expects parameter 1 to be resource, boolean given in 19
und
mysql_close() expects parameter 1 to be resource, object given in 462

In der Zeile 462 habe ich stehen:
mysql_close($dbh);
?>

Aber, ich muß jetzt leider est mal für ein paar Stunden weg. Ich melde mich dann gerne wieder. Und vielenvielen Dank für Deine Geduld.
 

Duddle

Posting-Frequenz: 14µHz

Falls es nur ein Script ist, könntest du mal das komplette alte Ding posten (entsprechend anonymisiert), dann kann man das für dich "übersetzen" und daran die neuen Prinzipien erklären. Zeile für Zeile zu ändern und dann jeweils die Fehler hier zu schreiben führt wahrscheinlich zu einem geringeren Lerneffekt.


Duddle
 

strichcode

Nicht mehr ganz neu hier

Das wäre supernett von Euch. Der Lerneffekt ist durchaus gewünscht, da ich ja auch noch das andere Projekt vor mir habe.
Nur heute sitze ich nicht mehr am Hauptrechner, sondern muß mich erstmal um mein defektes Auto kümmern.
(Was Frau nicht alles selbst machen muß.) ;-)
Vielen Dank für das Angebot, ich melde mich morgen wieder mit dem Script.
 

msa1989

Bin da

Ich hab deim Skript von oben umgeschrieben:

PHP:
// Verbindung zur Datenbank herstellen
$dhb = new MySQLi($mysql_host, $mysql_user, $mysql_password, $mysql_db);
// prüfen ob die Verbindung erfolgreich war
if ($dhb->connect_errno > 0) {
  die('Unable to connect to database ['.$dhb->connect_errno.']');
}
// Optional: default-charset utf8
if (!$dhb->set_charset('utf8')) {
  die("Error loading character set utf8: %s\n". $dhb->error);
}

$meine_nummer = 1234;
$abfrage = "SELECT * FROM Tabelle WHERE Nummer LIKE ?";     # Abfrage (hier neu: das Fragezeichen => das nennt sich prepared statement
$stmt = $dhb->prepare($query);                              # Abfrage "vorbereiten" => Die Abfrage ist vordefiniert und erwartet jetzt für das Fragezeichen einen Wert
$stmt->bind_param('i', $meine_nummer);                      # Parameter einbinden (i = integer, also ganze Zahl, s = string usw. -> siehe Dokumentation)
$stmt->execute();                                           # Abfrage ausführen
$stmt->store_result();                                      # Ergebnisse der Abfrage speichern
if ($stmt->num_rows > 0) {                                  # prüfen ob Ergebnisse vorhanden sind
  $stmt->bind_result($spalte1, $spate2, $etc);              # PHP-Variablennamen für die Spalten die du abfrägst
  while ($stmt->fetch()) {                                  # Alle Ergebnisse durchlaufen
    echo $spalte1;
    echo '...';
  }
}
$stmt->close();                                             # Ende

Da sind jetzt eine Menge Kommentare drin. Ich hoffe das erklärt schonmal was eigentlich genau passiert
 

strichcode

Nicht mehr ganz neu hier

Sorry, eher ging es nicht, zuviel arbeit.

Also hier ist das verkürzte, aber komplette script.
PHP:
<?php
// Fehler unterdrücken
error_reporting(E_ALL);

// Verbindung aufbauen, auswählen einer Datenbank
$mysql_host = "xxx";
$mysql_user = "yyy";
$mysql_password = "zzz";
$mysql_db = "db123";


$dbh = mysql_connect($mysql_host, $mysql_user, $mysql_password)
    or die("Keine Verbindung möglich: " . mysql_error());

mysql_select_db($mysql_db) or die("Auswahl der Datenbank fehlgeschlagen");

$abfrage = "SELECT * FROM TABELLLENNAME WHERE HAUS_NUMMER LIKE '123'"; // Die Nummer 123 ist bekannt und wird direkt //hier ins script eingetragen
$ergebnis = mysql_query($abfrage);

while ($daten = mysql_fetch_array( $ergebnis, MYSQL_ASSOC)) {
     echo '
<div id="lightboxbilder">
';
$klein = explode("\n", $daten['KAT01_250'],-1);
$gross = explode("\n", $daten['KAT01_800'],-1);

foreach($klein as $index => $pfadKlein) {
    $pfadGross = $gross[$index];
    echo "<a href='$pfadGross' rel='lightbox[galerie]' title='Aussenansicht vom Haus ".$daten['HAUS_NUMMER']." ".$daten['HAUS_NAME']." in Kroatien ".$daten['HAUS_PLZ']." ".$daten['HAUS_ORT']." für Gruppen'><img src='$pfadKlein' alt='Aussenansicht vom Haus ".$daten['HAUS_NUMMER']." ".$daten['HAUS_NAME']." in Kroatien ".$daten['HAUS_PLZ']." ".$daten['HAUS_ORT']." für Gruppen'/></a> ";
    }
$klein = explode("\n", $daten['KAT02_250'],-1);
$gross = explode("\n", $daten['KAT02_800'],-1);
foreach($klein as $index => $pfadKlein) {
    $pfadGross = $gross[$index];
    echo "<a href= '$pfadGross' rel='lightbox[galerie]' title='Weitere Ansichten vom Haus ".$daten['HAUS_NUMMER']." ".$daten['HAUS_NAME']." in Kroatien ".$daten['HAUS_PLZ']." ".$daten['HAUS_ORT']." für Gruppen'><img src='$pfadKlein' alt='Weitere Aussenansichten  ".$daten['HAUS_NUMMER']." ".$daten['HAUS_NAME']." in Kroatien ".$daten['HAUS_PLZ']." ".$daten['HAUS_ORT']." für Gruppenreisen'/></a> ";
        }
//und so weiter - 20 Kategorien lang
}


mysql_close($dbh);
?>



In der Datenbank sind in den Kategorien *_250 und *_800 jeweils Pfade eingetragen. Diese Pfade trage ich mit dem Script in das html. Die Texte für "title" und "alt" kommen ebenfalls aus der DB. Am Ende ist es dann eine Lightbox. Das html, das das script schreibt ist dieses hier:


HTML:
<div id="lightboxbilder">
<a href='http://www.xyz.de/haus-800-h.jpg
' rel='lightbox[galerie]' title='Aussenansicht vom Haus 123  in Kroatien plz Ort für Gruppen'><img src='http://www.xyz.de/haus-250-h.jpg
' alt='Aussenansicht vom Haus 123 in Kroatien plz Ort für Gruppenfreizeiten'/></a>
und so weiter
und so weiter
</div> <!--lightboxbilder-->

Ich hoffe, daß sich beim anonymisieren des codes jetzt kein Fehler eingeschlichen hat.
Und jetzt versuche ich mal das script von msa1989 zu verstehen.

Vielen Dank an Euch alle, daß Ihr mir helft.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.616
Beiträge
1.538.358
Mitglieder
67.536
Neuestes Mitglied
QuestionMark
Oben