
N3mo
Ich habe im Netz gesucht und bisher gesehen, was Sie verwenden können mysql_
und mysqli_
zusammen bedeutet:
<?php
$con=mysqli_connect("localhost", "root" ,"" ,"mysql");
if( mysqli_connect_errno( $con ) ) {
echo "failed to connect";
}else{
echo "connected";
}
mysql_close($con);
echo "Done";
?>
oder
<?php
$con=mysql_connect("localhost", "root" ,"" ,"mysql");
if( mysqli_connect_errno( $con ) ) {
echo "failed to connect";
}else{
echo "connected";
}
mysqli_close($con);
echo "Done";
?>
Sind gültig, aber wenn ich diesen Code verwende, bekomme ich Folgendes:
Connected
Warning: mysql_close() expects parameter 1 to be resource, object given in D:\************.php on line 9
Done
Für das erste und das gleiche außer mit mysqli_close()
. Für den zweiten.
Was ist das Problem? Kann ich nicht verwenden mysql_
und mysqli
zusammen? Oder ist es normal? Wie kann ich überprüfen, ob die Verbindungen überhaupt gültig sind? (der if(mysq...)
)
Nein, kannst du nicht verwenden mysql
und mysqli
zusammen. Sie sind separate APIs und die von ihnen erstellten Ressourcen sind nicht miteinander kompatibel.
Da ist ein mysqli_close
obwohl.

Rizier123
Nur um hier eine allgemeine Antwort zu allen drei MYSQL-APIs mit einer Referenz zu geben:
Sie können keines der drei mischen (mysql_*
, mysqli_*
, PDO
) MYSQL API’s von PHP zusammen, es funktioniert einfach nicht. Es ist sogar in der Handbuch FAQ:
es ist Ein Mischen der Erweiterungen ist nicht möglich. Also zum Beispiel eine MySQL-Verbindung an PDO_MySQL oder ext/mysql übergeben wird nicht funktionieren.
Sie müssen dieselbe MySQL-API und die zugehörigen Funktionen verwenden, von der Verbindung bis zur Abfrage.

Ihr gesunder Menschenverstand
Technisch gesehen können Sie so viele separate Verbindungen verwenden, wie Sie möchten, während Ihr Problem durch einen bloßen Tippfehler verursacht wird – Sie können nur Ressourcen einer Erweiterung nicht mit Funktionen einer anderen verwenden, was ganz offensichtlich ist.
Aber du sollte mehrere Verbindungen aus demselben Skript vermeiden, egal von einer einzelnen API oder verschiedenen. Da es Ihren Datenbankserver belastet und seine Ressourcen erschöpft. Obwohl dies technisch möglich ist, sollten Sie also nicht verschiedene Erweiterungen in Ihrem Code mischen, außer für die kurze Zeit des Refactorings.
MySQLi
ist viel sicherer als MySQL
was sowieso jetzt veraltet ist. Deshalb solltest du dabei bleiben MySQLi
und Sie können sie auch nicht mischen, da sie beide unterschiedlich sind.
9944400cookie-checkKann ich MySQL-APIs in PHP mischen?yes
mysql ist veraltet, es macht nur Sinn, dass sie nicht zusammenarbeiten würden. Warum versuchst du das..?
– Sterling Archer
5. Juli 2013 um 23:50 Uhr
Sie sollten die Verwendung vermeiden
mysql_*
funktioniert insgesamt. Sie sind fehleranfällig und unsicher und werden bald aus PHP entfernt (sie sind als veraltet im Augenblick). [This great answer][0] geht ins Detail erklärend warum Sie sind schlecht. [0]: stackoverflow.com/a/12860046/1055295– Andrei Barsan
5. Juli 2013 um 23:52 Uhr
1) Sie bestehen darauf, eine alte schäbige Schnittstelle (mysql) zu verwenden, die seit Ewigkeiten im Dokument als veraltet gekennzeichnet ist 2) Sie möchten sie aus irgendeinem seltsamen Grund mit ihrem Nachfolger mischen, anstatt das Richtige zu tun und auf die neue umzuwandeln 3 ) Sie sind so überrascht, dass es nicht funktioniert, dass Sie bei SO danach fragen, obwohl es ziemlich offensichtlich sein sollte, dass das, was Sie tun, Unsinn ist.
– fvu
6. Juli 2013 um 0:06 Uhr
Es ist kein Aberglaube. Natürlich kann man mit schlechten Code schreiben
mysqli_*
Funktionen und guter Code mitmysql_*
Einsen. Aber die letztgenannte Kategorie wird als veraltet markiert, da es sich um den minderwertigen Satz von Funktionen handelt, die keine Aufrufe im OO-Stil oder sogar vorbereitete Anweisungen unterstützen können (um nur zwei Beispiele zu nennen). Liegt die richtige Antwort nicht auf der Hand, wenn man zwei Tools zur Wahl hat, um die gleiche Arbeit zu erledigen, von denen eines auf lange Sicht eindeutig besser und flexibler ist?– Andrei Barsan
6. Juli 2013 um 8:22 Uhr
Natürlich nicht. Wenn Sie jedoch die Möglichkeit haben, zwischen der veralteten Funktionalität und der aktiv unterstützten zu wählen, um beispielsweise Ihre eigene Abstraktion zu erstellen, warum sollten Sie dann die alten Funktionen verwenden?
– Andrei Barsan
6. Juli 2013 um 9:54 Uhr