¿Puedo mezclar API de MySQL en PHP?


He buscado en la red y hasta ahora lo que he visto es que puedes usar mysql_ y mysqli_ juntos, lo que significa:

<?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 el 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 comprobar si las conexiones son válidas? (el if(mysq...))

Author: Taryn, 2013-07-06

4 answers

No, no puedes usar mysql y mysqli juntos. Son API separadas y los recursos que crean son incompatibles entre sí.

Hay un mysqli_close, sin embargo.

 55
Author: Explosion Pills,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-05 23:53:05

Solo para dar una respuesta general aquí sobre las tres API de MYSQL con una referencia:

No puedes mezclar ninguno de los tres (mysql_*, mysqli_*, PDO) MYSQL API de PHP juntos, simplemente no funciona. Está incluso en el manual FAQ :

No es posible mezclar las extensiones. Así, por ejemplo, pasar una conexión mysqli a PDO_MySQL o ext/mysql no funcionará.


Necesitas usar lo mismo MySQL API y sus funciones relacionadas, desde la conexión hasta la consulta.

 11
Author: Rizier123,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-30 23:08:24

Técnicamente puede usar tantas conexiones separadas como desee, mientras que su problema es causado por un mero error tipográfico: solo no puede usar recursos de una extensión con funciones de otra, lo cual es bastante obvio.

Sin embargo, debe evitar múltiples conexiones desde el mismo script, sin importar desde una sola API o diferentes. Ya que sobrecargará su servidor de base de datos y agotará sus recursos. Por lo tanto, aunque técnicamente puedes, no debes mezclar diferentes extensiones en su código, ahorre para el corto período de refactorización.

 2
Author: Your Common Sense,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-09 14:37:11

MySQLi es mucho más seguro que MySQL que de todos modos ahora está en desuso. Es por eso que debes seguir con MySQLi y también no puedes mezclarlos, ya que ambos son diferentes.

 -1
Author: duskwuff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-04 18:59:29