J'ai cherché sur le net et jusqu'à présent, ce que j'ai vu, c'est que vous pouvez utiliser mysql_
et mysqli_
signifier ensemble:
<?php
$con=mysqli_connect("localhost", "root" ,"" ,"mysql");
if( mysqli_connect_errno( $con ) ) {
echo "failed to connect";
}else{
echo "connected";
}
mysql_close($con);
echo "Done";
?>
ou
<?php
$con=mysql_connect("localhost", "root" ,"" ,"mysql");
if( mysqli_connect_errno( $con ) ) {
echo "failed to connect";
}else{
echo "connected";
}
mysqli_close($con);
echo "Done";
?>
Sont valides mais lorsque j'utilise ce code, ce que j'obtiens est:
Connected
Warning: mysql_close() expects parameter 1 to be resource, object given in D:\************.php on line 9
Done
Pour le premier et le même sauf avec mysqli_close()
. Pour le second.
Quel est le problème? Puis-je utiliser mysql_
et mysqli
ensemble? Ou est-ce normal? Est-ce que je peux vérifier si les connexions sont valides du tout? (le if(mysq...)
)
mysql_*
complètement d' utiliser des fonctions. Ils sont sujets aux erreurs et dangereux, et ils seront bientôt supprimés de PHP (ils sont marqués comme obsolètes pour le moment). [Cette excellente réponse] [0] va plus en détail en expliquant pourquoi ils sont mauvais. [0]: stackoverflow.com/a/12860046/1055295mysqli_*
fonctions et du bon code avecmysql_*
celles-ci. Mais cette dernière catégorie est marquée comme obsolète car c'est l'ensemble de fonctions inférieur, ne pouvant pas prendre en charge les invocations de style OO ou même les instructions préparées (pour ne citer que deux exemples). Si l'on a le choix entre deux outils pour faire le même travail, dont l'un est nettement meilleur à long terme et plus flexible, la bonne réponse n'est-elle pas évidente?Réponses:
Non, vous ne pouvez pas utiliser
mysql
etmysqli
ensemble. Ce sont des API distinctes et les ressources qu'elles créent sont incompatibles les unes avec les autres.Il y a un
mysqli_close
, cependant.la source
Juste pour donner une réponse générale ici sur les trois API MYSQL avec une référence:
Vous ne pouvez pas mélanger l' un des trois (
mysql_*
,mysqli_*
,PDO
) API PHP MYSQL de partir ensemble, il ne fonctionne tout simplement pas. C'est même dans la FAQ du manuel :Vous devez utiliser la même API MySQL et ses fonctions associées, de la connexion à l'interrogation.
la source
mysql_real_escape_string()
avec ce que le reste de leur code était PDO. Y a-t-il quelque chose que je n'ai pas eu ici pendant mon temps avec ces différentes API? Suis-je l'ignorant ici? Ceci étant pour la question "maintenant supprimée" stackoverflow.com/q/34209127 visible uniquement par plus de 10 000 membres si quelqu'un se demande. Ceci par rapport à$stmt3->execute(array('classID' => $_POST['class'],'studentID' => mysql_real_escape_string($substr)))
- Est-ce que je manque quelque chose ici?mysql_real_escape_string()
cela essaiera silencieusement d' établir une connexion avec les paramètres par défaut qui fonctionnaient alors pour OP. Donc, il a juste fait la connexion pour obtenir le jeu de caractères. Donc OP a 2 connexionsini_get()
. Donc, cela ne fonctionne probablement que pour OP avec les paramètres par défaut. Je voudrais juste le laisser et prendre un nouveau café (☕☕☕).sqlsrv_query()
. Je viens de fermer une question ici stackoverflow.com/q/41263771Techniquement, vous pouvez utiliser autant de connexions séparées que vous le souhaitez, alors que votre problème est causé par une simple faute de frappe - vous ne pouvez pas utiliser les ressources d'une extension avec des fonctions d'une autre, ce qui est bien évident.
Cependant, vous devez éviter plusieurs connexions à partir du même script , que ce soit une API unique ou différentes. Comme cela va alourdir votre serveur de base de données et épuiser ses ressources. Donc, bien que techniquement vous le puissiez, vous ne devriez pas mélanger différentes extensions dans votre code, sauf pour la courte période de refactoring.
la source
MySQLi
est beaucoup plus sûr queMySQL
ce qui est de toute façon obsolète. C'est pourquoi vous devez vous en tenir àMySQLi
et vous ne pouvez pas non plus les mélanger car ils sont tous les deux différents.la source