Pregunta

El siguiente código funciona perfectamente bien en mi instalación local de XAMPP (Windows 7), pero cuando lo porté a un servidor Win2K8 R2, la pieza mysql_real_escape_string no funciona. Cuando lo comento, funciona bien. Estoy bastante seguro de que esto tiene algo que ver con el archivo php.ini, pero no puede identificar lo que es. Quizás mi código debería haber sido escrito de manera diferente para empezar.

function add_asset($asset_type_ID, $org_ID, $asset_desc, $asset_cost, $asset_value, $purchase_date) {
    global $db;
    $asset_desc = mysql_real_escape_string($asset_desc);
    $query = "INSERT INTO assets
                 (asset_ID, asset_type_ID, org_ID, asset_desc, asset_cost, asset_value, purchase_date)
              VALUES
                 (DEFAULT, '$asset_type_ID', '$org_ID', '$asset_desc', '$asset_cost', '$asset_value', '$purchase_date')";
    $add_asset = $db->exec($query);
    $last_asset_ID = $db->lastInsertId();
    return $last_asset_ID;

Específicamente, cuando el registro se ingresa en MySQL, el asset_desc El campo está en blanco.

¡Gracias!

ACTUALIZACIÓN: Después de revisar el registro de errores de PHP, encontré lo siguiente:

[function.mysql-real-escape-string]: Acceso denegado para el usuario ''@'localhost' (usando contraseña: no)

¿Fue útil?

Solución

Parece que las credenciales que esté utilizando para conectarse a la base de datos en su sistema de desarrollo está fallando en su servidor.

mysql_real_escape_string() requiere una conexión MySQL activa para que funcione correctamente; Si no está conectado a la base de datos, fallará.

  • Verifique donde esté llamando en su código mysql_connect(); Desde el mensaje de error, parece que su sistema de desarrollo se basa en el Valores de tiempo predeterminado de tiempo de ejecución para la extensión MySQL.

  • Alternativamente, el recurso de conexión podría no ser accesible para mysql_real_escape_string() en el sistema del servidor. De la documentación para mysql_real_escape_string() (énfasis mío):

    link_identifier

    La conexión MySQL. Si no se especifica el identificador del enlace, el último enlace se abre por mysql_connect() se supone. Si no se encuentra dicho enlace, intentará crear uno como si mysql_connect() fue llamado sin argumentos. Si no se encuentra ni se establece ninguna conexión, se genera un error de nivel E_WARNNING.

    Quizás sea posible que su servidor de desarrollo esté configurado de tal manera que llame mysql_connect() Sin argumentos, establece una conexión con el servidor de base de datos MySQL. Las razones más probables para esto son el servidor de Dev MySQL permite conexiones anónimas, o php.ini especifica credenciales predeterminadas válidas.

    Sin embargo, esto falla en la producción, muy probablemente porque el servidor MySQL de producción no permite conexiones anónimas, y no se especifican credenciales predeterminadas en php.ini.

    Consulte su código para ver las situaciones en las que sea posible llegar a la llamada a mysql_real_escape_string() sin que mysql_connect() ser llamado primero (tenga en cuenta que establecer una conexión con PDO no cuenta en este caso).

  • Como está usando PDO, considere cambiar a declaraciones preparadas, que eliminará la necesidad de mysql_real_escape_string() enteramente.

Otros consejos

Probablemente estés pensando en "citas mágicas"

http://php.net/manual/en/security.magicquotes.disabling.php

Esta función se ha desaprobado en PHP 5.3http://php.net/manual/en/function.mysql-escape-string.php

Tendrá que reescribir su código, idealmente usar PDO a partir de ahora y usar declaraciones preparadas.

Respuesta rápida:

Conéctese a la base de datos primero

Luego use el mysql_real_escape_string.

No de la otra manera......

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top