Ich habe das Netz durchsucht und bisher habe ich gesehen, dass Sie verwenden können mysql_
und mysqli_
zusammen bedeuten:
<?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
Zum ersten und gleichen außer mit mysqli_close()
. Für den zweiten.
Was ist das Problem? Kann ich nicht mysql_
und mysqli
zusammen verwenden? Oder ist es normal? Kann ich auf diese Weise überprüfen, ob die Verbindungen überhaupt gültig sind? (die if(mysq...)
)
mysql_*
Funktionen insgesamt vermeiden . Sie sind fehleranfällig und unsicher und werden bald aus PHP entfernt (sie werden derzeit als veraltet markiert ). [Diese großartige Antwort] [0] erklärt ausführlicher, warum sie schlecht sind. [0]: stackoverflow.com/a/12860046/1055295mysqli_*
Funktionen und guten Code mitmysql_*
solchen schreiben . Die letztere Kategorie wird jedoch als veraltet markiert, da es sich um die minderwertige Gruppe von Funktionen handelt, die keine Aufrufe im OO-Stil oder sogar vorbereitete Anweisungen unterstützen können (um nur zwei Beispiele zu nennen). Ist die richtige Antwort nicht offensichtlich, wenn zwei Tools ausgewählt werden, um denselben Job zu erledigen, von denen eines auf lange Sicht eindeutig besser und flexibler ist?Antworten:
Nein, Sie können nicht
mysql
undmysqli
zusammen verwenden. Sie sind separate APIs und die von ihnen erstellten Ressourcen sind nicht miteinander kompatibel.Es gibt jedoch eine
mysqli_close
.quelle
Nur um hier eine allgemeine Antwort zu allen drei MYSQL-APIs mit einer Referenz zu geben:
Sie können keine der drei mischen (
mysql_*
,mysqli_*
,PDO
zusammen von PHP) MYSQL - API, es funktioniert einfach nicht. Es ist sogar in den manuellen FAQ :Sie müssen dieselbe MySQL-API und die zugehörigen Funktionen verwenden, von der Verbindung bis zur Abfrage.
quelle
mysql_real_escape_string()
mit dem Rest ihres Codes mischen , der PDO ist. Gibt es etwas, das ich in meiner Zeit mit der Arbeit mit diesen verschiedenen APIs nicht hierher gebracht habe? Bin ich der Unwissende hier? Dies ist für die "jetzt gelöschte" Frage stackoverflow.com/q/34209127 nur für mehr als 10.000 Mitglieder sichtbar, sollte sich jemand fragen. Dies in Bezug auf$stmt3->execute(array('classID' => $_POST['class'],'studentID' => mysql_real_escape_string($substr)))
- Vermisse ich hier etwas?mysql_real_escape_string()
im Stillen versucht wird , eine Verbindung mit den Standardparametern herzustellen, die dann für OP funktionierten. Es wurde also nur die Verbindung hergestellt, um den Zeichensatz zu erhalten. OP hat also 2 Verbindungenini_get()
. Es funktioniert also wahrscheinlich nur für OP mit den Standardeinstellungen. Ich würde es einfach verlassen und mir einen neuen Kaffee holen (☕☕☕).sqlsrv_query()
. Ich habe gerade eine Frage hier geschlossen stackoverflow.com/q/41263771Technisch gesehen können Sie so viele separate Verbindungen verwenden, wie Sie möchten, während Ihr Problem durch einen Tippfehler verursacht wird. Sie können nur Ressourcen von einer Erweiterung nicht mit Funktionen von einer anderen verwenden, was ganz offensichtlich ist.
Sie sollten jedoch mehrere Verbindungen aus demselben Skript vermeiden , unabhängig davon, ob es sich um eine einzelne oder eine andere API handelt. Dies wird Ihren Datenbankserver belasten und seine Ressourcen erschöpfen. Obwohl dies technisch möglich ist, sollten Sie nicht verschiedene Erweiterungen in Ihrem Code mischen, außer für die kurze Zeit des Refactorings.
quelle
MySQLi
ist viel sicherer alsMySQL
das, was jetzt sowieso veraltet ist. Deshalb sollten Sie dabei bleibenMySQLi
und können sie auch nicht mischen, da beide unterschiedlich sind.quelle