sql >> Base de Datos >  >> RDS >> Mysql

Error al obtener acceso denegado al ejecutar mysql_query en php

Actualización final:

Abrí una sesión de chat con Aditii e hicimos una depuración allí.

Resultó que el problema era que se había actualizado de un servidor que tenía etiquetas cortas habilitadas a uno que no las tenía. Como resultado, todo su código que estaba encerrado en etiquetas cortas no se ejecutaba, y esto incluía su archivo de configuración.

El error en la pregunta se debió a mysql_connect() La función no se ejecuta porque no se ejecuta todo el archivo. Un mysql_query() la llamada que dependía de esa conexión falló debido a esto.

Después de corregir sus etiquetas cortas para usar el <?php completo etiqueta, ese archivo se ejecutó. Como discutí en mi respuesta original a esta pregunta, las comillas simples alrededor de las variables que se pasan a mysql_connect() terminó causando problemas. Después de recomendar que se eliminen esas comillas simples, la conexión se realizó correctamente y el problema se resolvió.

La sesión de depuración completa, para cualquier parte interesada, se puede encontrar aquí .

Primera actualización:

Después de mirar esto un poco más de cerca, hay dos piezas que no se ajustan a mi respuesta original (que he guardado al final de esta respuesta, ya que todavía tiene buena información).

Primero, el error está siendo activado por mysql_query() no mysql_connect() . Esto probablemente se deba a que no hay un manejo de errores en torno a la conexión, por lo que el error no se nota hasta más tarde. Intente agregar un manejo de errores en torno a la conexión:

if (!($con = mysql_connect('$localhost','$username','$password'))) {
  echo mysql_error();
}

if (!mysql_select_db('$dbname',$con)) {
  echo mysql_error();
}

En lo anterior, los errores se mostrarán tan pronto como ocurra el error.

Lo segundo que veo es que te estás conectando a localhost con el ODBC usuario. Esto no tiene sentido si el código de conexión que ha mostrado arriba desencadena el error. O estaría iniciando sesión con un usuario llamado $username si su problema es el problema de comillas simples que explico a continuación, o root si no lo eres.

Parece que PHP está intentando conectarse con las credenciales predeterminadas para su configuración de PHP (que se encuentran en su php.ini archivo), en lugar de las credenciales que ha proporcionado. Esto me lleva a creer que las líneas que nos muestra no son en realidad las líneas que se están ejecutando. ¿Está seguro de que no está tratando de conectarse en otra parte de su código? Si es así, sospecho que su error radica en esa parte del código.

También es posible (tendría que comprobarlo) que cuando intente ejecutar mysql_query() contra una conexión nula, tal vez PHP esté tratando de crear una conexión para usted. Sin embargo, no contaría con eso.

Le sugiero que intente ejecutar el código actualizado que proporcioné anteriormente, que usa el mysql_error() para mostrar los errores a medida que ocurren. Incluso podría agregar algo de echo sus propias declaraciones en esos bloques, para una buena depuración de printf a la antigua.

Respuesta original:

El problema es que estás envolviendo tus variables entre comillas simples. Si los envuelve entre comillas simples, PHP no evalúa la variable al valor. Por ejemplo, en lugar de pasar root como segundo argumento, estás pasando $username . Al final, está intentando iniciar sesión en un servidor llamado $localhost con un usuario llamado $username con una contraseña de $password .

Eche un vistazo a la página de documentación de PHP para cadenas . Explica esto:

Si desea usar variables dentro de una cadena, debe usar doble comillas, no individuales. En este caso, sin embargo, ni siquiera necesita envolver estas variables entre comillas, porque sus valores ya instrumentos de cuerda. Puede simplemente pasar la variable por sí misma. Prueba esto:

$con=mysql_connect($localhost, $username, $password);
mysql_select_db($dbname, $con);