mysql_real_escape_string funciona en localhost pero no en servidor web

Tengo un script PHP que está insertando un registro en una base de datos después de obtener los datos de un formulario lleno de usuarios. Desarrollé en mi máquina local (servidor WAMP) y tengo el siguiente código en mi script PHP:

$name = mysql_real_escape_string($_POST['name']); $email = mysql_real_escape_string($_POST['email']); //connecting to db mysql_connect("host", "user", "pass") or die('save_failed'); mysql_select_db("db") or die('save_failed'); //inserting into table mysql_query("INSERT INTO table(name, email) VALUES('" . $name . "', '" . $email . "' ) ") or die('save_failed'); 

El script funcionó tal como se esperaba y los registros se insertaron con éxito en la tabla.

Tan pronto como moví el script a mi servidor web, me di cuenta de que los valores almacenados en la base de datos eran cadenas vacías. La eliminación de mysql_real_escape_string corrige esto.

¿Por qué mysql_real_escape_string no funcionará en mi servidor web?

La base de datos en la que estoy trabajando no ha cambiado. Incluso cuando se desarrollaba localmente, estaba llegando a mi base de datos del servidor web. PHP ver en localhost es 5.3.8 mientras que en el servidor web es 5.2.

¿PHP 5.2 no es compatible con mysql_real_escape_string y, de ser así, cuál es la alternativa?

Ponga mysql_connect("host", "user", "pass") or die('save_failed'); antes mysql_real_escape_string .

Primero necesita conectarse a la base de datos, luego mysql_real_escape sus cadenas. Sospecho que funciona localmente porque PHP y su base de datos están configurados para que puedan establecer una conexión automáticamente cuando sea necesario.

http://www.php.net/mysql_real_escape_string

Si no se especifica el identificador de enlace, se asume el último enlace abierto por mysql_connect() . Si no se encuentra dicho enlace, intentará crear uno como si se llamara a mysql_connect() sin argumentos. Si no se encuentra o no se establece ninguna conexión, se genera un error de nivel E_WARNING .

Aparentemente, también deberías activar el informe de errores y / o verificar tus registros de errores.

Desde la página del manual para mysql_real_escape_string () :

Parámetros

unescaped_string : la cadena que se va a escapar.

link_identifier: La conexión MySQL. Si no se especifica el identificador de enlace, se asume el último enlace abierto por mysql_connect (). Si no se encuentra dicho enlace, intentará crear uno como si se llamara a mysql_connect () sin argumentos. Si no se encuentra o no se establece ninguna conexión, se genera un error de nivel E_WARNING.

Su código usa mysql_real_escape_string() antes de llamar a mysql_connect() . Eso significa que PHP está tratando de abrir una conexión con el servidor MySQL antes de lo que piensas y que no estás proporcionando credenciales ni realizando comprobaciones de errores. Si funciona en su caja de desarrollo, probablemente sea pura casualidad: su servidor local tiene credenciales predeterminadas en php.ini o una cuenta MySQL sin contraseña.

Mueva la parte de conexión a db a la parte superior y listo.