web-dev-qa-db-fra.com

Puis-je mélanger les API MySQL en PHP?

J'ai cherché sur le net et jusqu'à présent, ce que j'ai vu, c'est que vous pouvez utiliser mysql_ Et mysqli_ Ensemble, ce qui signifie:

<?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 quand j'utilise ce code, je reçois:

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? Je ne peux pas utiliser mysql_ Et mysqli ensemble? Ou est-ce normal? Est-ce que je peux vérifier si les connexions sont valides? (le if(mysq...))

101
N3mo

Non, vous ne pouvez pas utiliser mysql et mysqli ensemble. Ce sont des API distinctes et les ressources qu'elles créent sont incompatibles entre elles.

Il y a un mysqli_close, bien que.

62
Explosion Pills

Juste pour donner une réponse générale ici sur les trois API MYSQL avec une référence:

Vous ne pouvez mélanger aucun des trois ( mysql_* , mysqli_* , PDO ) API MYSQL de PHP ensemble, cela ne fonctionne tout simplement pas. C'est même dans le FAQ manuelle :

Il est impossible de mélanger les extensions . Ainsi, par exemple, passer une connexion mysqli à PDO_MySQL ou ext/mysql ne fonctionnera pas .


Vous devez utiliser la même API MySQL et ses fonctions associées, de la connexion à l'interrogation.

12
Rizier123

Techniquement, vous pouvez utiliser autant de connexions distinctes que vous le souhaitez, tandis 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 tout à fait évident.

Cependant, vous devez éviter plusieurs connexions à partir du même script, peu importe d'une seule API ou de différentes. Comme cela va surcharger votre serveur de base de données et épuiser ses ressources. Donc, bien que techniquement vous le puissiez, vous ne devez pas mélanger différentes extensions dans votre code, sauf pour la courte période de refactoring.

2
Your Common Sense