¿Puedo mezclar API de MySQL en PHP?
He buscado en la red y hasta ahora lo que he visto es que se puede usar mysql_
y mysqli_
juntos significando:
<?php
$con=mysqli_connect("localhost", "root" ,"" ,"mysql");
if( mysqli_connect_errno( $con ) ) {
echo "failed to connect";
}else{
echo "connected";
}
mysql_close($con);
echo "Done";
?>
o
<?php
$con=mysql_connect("localhost", "root" ,"" ,"mysql");
if( mysqli_connect_errno( $con ) ) {
echo "failed to connect";
}else{
echo "connected";
}
mysqli_close($con);
echo "Done";
?>
Son válidos pero cuando uso este código lo que obtengo es:
Connected
Warning: mysql_close() expects parameter 1 to be resource, object given in D:\************.php on line 9
Done
Para el primero y lo mismo excepto con mysqli_close()
. Para el segundo.
¿Cuál es el problema? ¿ No puedo usar mysql_
y mysqli
juntos? ¿O es normal? ¿Es la forma en que puedo verificar si las conexiones son válidas? (el if(mysq...)
)
No, no puedes usar mysql
y mysqli
juntos. Son API independientes y los recursos que crean son incompatibles entre sí.
Sin embargo, hay un mysqli_close
.
Solo para dar una respuesta general aquí sobre las tres API de MYSQL con una referencia:
No puede mezclar ninguna de las tres ( ,, mysql_*
) API MYSQL de PHP, simplemente no funciona. Incluso está en las preguntas frecuentes del manual :mysqli_*
PDO
No es posible mezclar las extensiones . Entonces, por ejemplo, pasar una conexión mysqli a PDO_MySQL o ext/mysql no funcionará .
Debe utilizar la misma API de MySQL y sus funciones relacionadas, desde la conexión hasta la consulta.
- http://php.net/manual/en/mysqlinfo.api.choosing.php
Técnicamente puedes usar tantas conexiones separadas como quieras, mientras que tu problema es causado por un simple error tipográfico: solo no puedes usar recursos de una extensión con funciones de otra, lo cual es bastante obvio.
Sin embargo, debes evitar múltiples conexiones desde el mismo script , sin importar desde una API única o desde otras diferentes. Ya que cargará su servidor de base de datos y agotará sus recursos. Entonces, aunque técnicamente puedes, no debes mezclar diferentes extensiones en tu código, salvo durante el corto período de refactorización.