preparadas - php pdo execute
Escribir consultas PHP PDO como `dbName`.tableName` en lugar de` tableName`-¿por qué? (2)
Estoy escribiendo una función de registro de usuario en PHP PDO, y he encontrado que mi consulta solo se ejecutará correctamente si está escrita así:
<?php
$dbHost="localhost";
$dbName="project";
$dbUser="admin";
$dbPassword="abcd";
$dbh=new PDO("mysql:host=$dbHost;dbName=$dbName", $dbUser, $dbPassword);
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$query=$dbh->prepare("INSERT INTO project.users (userName, userEmail) VALUES (?,?)");
.....
Por otro lado, no se ejecutará si escribo:
...
$query=$dbh->prepare("INSERT INTO users (userName, userEmail) VALUES (?,?)");
...
En ese caso, aparece el siguiente mensaje de error:
Error fatal: excepción no detectada ''PDOException'' con el mensaje ''SQLSTATE [3D000]: nombre del catálogo inválido: 1046 Sin base de datos seleccionada'' en C: / wamp / www / Tests / Test03 / Index.php: 11 Stack trace: # 0 C: / wamp / www / Tests / Test03 / Index.php (11): PDOStatement-> execute () # 1 {main} lanzado en C: / wamp / www / Tests / Test03 / Index.php en la línea 11
¿Por qué es que necesito precisar project.users
? ¿Por qué no es suficiente ingresar el nombre de la tabla, dado que el nombre db ya está en el objeto PDO?
¡Gracias!
JDelage
ACTUALIZACIÓN Consulte la respuesta aceptada a continuación. Reemplazando dbName=$dbName
con dbname=$dbName
resuelve este problema.
Aparentemente, PDO no pudo establecer que la base de datos activa sea "proyecto" y, por lo tanto, debe especificarla siempre.
Intenta modificar tu línea para que se vea así:
$dbh=new PDO("mysql:host=$dbHost;dbname=$dbName", $dbUser, $dbPassword);
La única diferencia es que dbname
se deletrea en minúsculas en lugar del suyo dbName
.
Alternativamente, ejecute este comando SQL luego de establecer con éxito una conexión: USE project;
, p.ej
$dbh->exec(''USE project;'');
Tratar:
"mysql:dbName=$dbName;host=$dbHost"
"mysql:dbName=$dbName;host=$dbHost;"
en lugar de:
"mysql:host=$dbHost;dbName=$dbName"
a veces el orden es importante.