He buscado en la red y hasta ahora lo que he visto es que pueden usar mysql_
y mysqli_
juntos 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...)
)
mysql_*
funciones por completo. Son propensos a errores e inseguros, y pronto se eliminarán de PHP (están marcados como obsoletos en este momento). [Esta gran respuesta] [0] explica con más detalle por qué son malos. [0]: stackoverflow.com/a/12860046/1055295mysqli_*
funciones y código bueno conmysql_*
otras. Pero la última categoría está marcada como obsoleta ya que es el conjunto inferior de funciones, no pudiendo admitir invocaciones de estilo OO o incluso declaraciones preparadas (por nombrar solo dos ejemplos). Dada la opción de dos herramientas para hacer el mismo trabajo, una de las cuales es claramente mejor a largo plazo y más flexible, ¿no es obvia la respuesta correcta?Respuestas:
No, no puedes usar
mysql
ymysqli
juntos. Son API independientes y los recursos que crean son incompatibles entre sí.Sin
mysqli_close
embargo, hay un .fuente
Solo para dar una respuesta general aquí sobre las tres API de MYSQL con una referencia:
No se puede mezclar cualquiera de los tres (
mysql_*
,mysqli_*
,PDO
MySQL API) de PHP de juntas, simplemente no funciona. Incluso está en el manual de preguntas frecuentes :Debe utilizar la misma API de MySQL y sus funciones relacionadas, desde la conexión hasta la consulta.
fuente
mysql_real_escape_string()
con el resto de su código que es PDO. ¿Hay algo que no logré en mi tiempo trabajando con estas diferentes API? ¿Soy yo el ignorante aquí? Esto es para la pregunta "ahora eliminada" stackoverflow.com/q/34209127 solo visible para más de 10K miembros si alguien se pregunta. Esto en relación con$stmt3->execute(array('classID' => $_POST['class'],'studentID' => mysql_real_escape_string($substr)))
: ¿Me estoy perdiendo algo aquí?mysql_real_escape_string()
será en silencio intentar establecer una conexión con los parámetros por defecto que entonces trabajaban para OP. Así que simplemente hizo la conexión para obtener el juego de caracteres. Entonces OP tiene 2 conexionesini_get()
. Entonces probablemente solo funcione para OP con la configuración predeterminada. Lo dejaría y tomaría un café nuevo (☕☕☕).sqlsrv_query()
. Acabo de cerrar una pregunta aquí stackoverflow.com/q/41263771Técnicamente, puede usar tantas conexiones separadas como desee, mientras que su problema se debe a 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 si son API únicas o diferentes. Ya que cargará su servidor de base de datos y agotará sus recursos. Entonces, aunque técnicamente puede, no debe mezclar diferentes extensiones en su código, excepto durante el corto período de refactorización.
fuente
MySQLi
es mucho más seguro que loMySQL
que ahora está en desuso. Es por eso que debes quedarteMySQLi
y tampoco puedes mezclarlos, ya que ambos son diferentes.fuente