uncaught - guión bajo en php db variable causando problemas
sqlstate[28000][1045] access denied for user laravel (3)
Como un trabajo alrededor construí funciones para obtener en el archivo que la información está almacenada que devuelve las cadenas, y funciona. Súper extraño, pero funciona.
Guardo toda mi información de inicio de sesión para bases de datos en archivos fuera del árbol público en variables tales como
$hostname = ''172.0.0.0'';
$dbname = ''myname_mydbname'';
$username = ''myname_user'';
$pw = ''password'';
Eso es bastante estándar.
El problema es que este alojamiento particular con el que estoy trabajando requiere que myname_
al frente de todas las bases de datos y nombres de usuario. Cuando almaceno estas cadenas y las paso a un PDO, lo dejo todo en el nombre de usuario después de myname, y dejo la cadena de contraseña en su totalidad ... Si pongo el nombre de usuario y la contraseña en la función como cadenas en lugar de variables, todo funciona. Estoy en mi ingenio final. ¿Alguien puede ayudar? aquí está la función tal como está en el código.
No funciona:
$this -> DB = new PDO ("mysql:host={$hostname}; dbname={$dbname}", $username, $pw);
trabajos:
$this -> DB = new PDO ("mysql:host={$hostname};dbname={$dbname}", ''myname_user'', ''password'');
Espero que alguien aquí me haga sentir estúpido ... gracias de antemano. David
el error podría ayudar ...
Error al obtener el identificador de DB: SQLSTATE [28000] [1045] Acceso denegado para el usuario ''myname'' @ ''localhost'' (usando la contraseña: NO)
Nada de lo que puedo encontrar en la documentación de PDO sugiere que puede especificar un nombre de usuario o contraseña en la cadena DSN; es una cadena de nombre de fuente de base de datos, no de "nombre de fuente de la base de datos y autentificación". El hecho de que no use contraseña debe ser una pista para esto, y el nombre de usuario que es ''myname'' es probablemente solo porque la mayoría de los RDBM usan el entorno $ USER var para conectarse si no se especifica ninguno (que debo suponer que está establecido en ''myname'')
es decir, creo que simplemente tiene que usar los parámetros adicionales para pasar las credenciales de autenticación
deberías obtener el mismo resultado al agregar presupuestos
////the variable
$myusr=''myname_user'';
////now append quotes
$user="''".$myusr."''";
///which would be the same thing as
$psswd= "''pass_word''";
la función pdo eliminará las comillas simples ('''') si quisiera almacenarlas con comillas, sería ''/' contraseña / '''' en su declaración SQL, ya que las comillas almacenadas deben almacenarse con delimitadores para evitar el escape automático.
INSERT INTO `Auth_USERs` (`id`, `usrname`, `passwd`, `email`, `reg_date`) VALUES (NULL, ''/'myname_user/''', ''/'pass_word/''', ''[email protected]'', CURRENT_TIMESTAMP);
te encontraste con {} ya que trata la variable como dentro de un contenedor, por lo que se agrega '''' por supuesto, la matriz get lo hace también (con diferentes caracteres, luego php se escapa en la página siguiente) ya que estás ejecutando un java función para hacer sus funciones de obtención, esencialmente está añadiendo citas que no se escapan. Hasta que la función PDO se les escape.
$this -> DB = new PDO ("mysql:host={$hostname};dbname={$dbname}", $user, $psswd);