Ver Mensaje Individual
  #8 (permalink)  
Antiguo 14/04/2009, 19:14
Avatar de Acron_0248
Acron_0248
 
Fecha de Ingreso: junio-2005
Ubicación: 127.0.0.1
Mensajes: 1.648
Antigüedad: 18 años, 10 meses
Puntos: 18
Respuesta: Pregunta sobre el funcionamiento de mysql_connect

Bueno, a ver :)


Hasta ahora, varias han sido las respuestas a las dudas que planteé en un comienzo (gracias GatorV y PatomaS ;)) pero de igual forma, el mensaje de PatomaS aunque no busca contestar directamente ninguna interrogante en particular tiene mucha relación con al menos una duda y tal duda es ¿por qué mysql_connect() funciona como lo hace?

Cierto, las documentaciones dan un "por qué" y es simplemente que la API de mysql si recibe string "" (0) o NULL usará por defecto unos valores, 'localhost', 'root' y una clave en blanco, pero queda aún otro "por qué" en el aire y es ¿por qué se ha decidido implementar tal comportamiento? y como adición a ese por qué, ¿qué consecuencias tiene ese comportamiento?

Obviamente es una pregunta para los desarrolladores de MySQL y en menor parte tal vez para los desarrolladores de PHP, sin embargo, uno de mis intereses al preguntar era discutir sobre el funcionamiento de la función en cuestión.

Dejando por un momento al lado el tema de la seguridad, a nivel del programador la función realmente no hace un trabajo lógico y por lógico me refiero a que lo que se puede inferir en base a los parámetros que recibe la función es algo distinto a lo que termina usando la librería.

Cosas como cadenas vacías, FALSE o NULL son cuadros en memoria que no tienen ningún valor asignado, partiendo desde ese punto, no es algo realmente lógico que cualquiera de esos valores termine siendo equivalente a root o a localhost.

Como ya dijo PatomaS, PHP debería forzar valores para la API de mysql más aún cuando en todo momento PHP es un intermediario entre el programador y la API que es quien termina definiendo el comportamiento de las funciones mysql_connect y mysql_real_connect.

Otra cosa interesante es el type casting. Como ya dijeron, una cadena vacía es equivalente a FALSE pero no al revés, FALSE no es equivalente a una cadena vacía, entonces el casting que hace PHP para enviar una cadena vacía a la API de mysql no es realmente un funcionamiento lógico, ni a ojos del programador ni a ojos del lenguaje.

Si bien type casting es útil, no lo es para cada posible ejecución de código y algo tan importante como mysql_connect() debería tratarse de mejor forma.

Volviendo a lo que ya mencionaron, la seguridad, ciertamente no es la forma más segura de hacer las cosas, es una de las razones que me hicieron leer y preguntar acerca de la función cuando comencé a ver los resultados de las pruebas usando parámetros como FALSE o NULL.

Gran cantidad de artículos, guías y libros indican que siempre que se hace un projecto que involucre a PHP y MySQL, lo mejor es crear un usuario particular para la aplicación con privilegios limitados en el servidor MySQL que solo permita hacer las consultas necesarias para que la aplicación funcione, sin embargo, si es posible de alguna forma llamar mysql_connect() usando parámetros como false, null o cadenas vacías, la medida anterior sería completamente inútil.

Aún sigo buscando alguna documentación extra (tal vez más técnica) referente a la función por lo que si alguien tiene alguna, sería genial :) sino, pues nada, seguiré buscando.


Salu2
__________________
Usuario Reigistrado de linux #399288