I have a problem with PDO, and I see absolutely no where he come. I can not question my MySQL database. Just to test I used the following code (having quite sour previously configured the parameters for the connection:
try {
$dbh= new PDO('mysql:host=serverName;dbname=Mydatabase','user','password');
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (Exception $e) {
die('Erreur : ' . $e->getMessage());
}
var_dump($dbh); // gives : object(PDO)#1 (0) { }
$res=$dbh->query('SELECT * FROM table');
The connection is made correctly with MySQL but after query I get this error:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected' in /home/outout/public_html/file.php:16 Stack trace: #0 /home/outout/public_html/file.php(16): PDO->query('select * from t...') #1 {main} thrown in /home/outout/public_html/file.php on line 16.
The code works on a local machine, but as soon as I put it online (cPanel) it shows me this error. Do I have to configure PDO in .htaccess?
I absolutely do not understand where the problem come. Someone would have an idea?
Help Mysql resolve the handle by.
Instead of:
$res=$dbh->query('SELECT * FROM table');
Try:
$res=$dbh->query('SELECT * FROM Mydatabase.table');
I faced the same problem while not mentioning the 'host' string with 'mysql' (mysql:host). I solved the problem by following code.
class Database{
protected static $pdo;
public function __construct(){}
public function connect(){
$dsn="mysql:host=localhost;dbname=dbname";
try{
self::$pdo = new PDO($dsn,"root","");
self::$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo 'Connected';
return self::$pdo;
}catch(PDOException $ex){
echo $ex->getMessage();
}
return false;
}
public function getConnection(){
return self::$pdo;
}
}
Instead of:
$res=$dbh->query('SELECT * FROM table');
just do:
$res=$dbh->query('SELECT * FROM dbname.tablename');
You will be good to go.
$dbh= new PDO('mysql:host=serverName;dbname=Mydatabase','user','password');
This here is wrong. You can't have host=serverName, instead you need to have something like host=$serverName, and then the $serverName = "servername.domanin"; the same with dbname=Mydatabase, you need to make those variables, $Mydatabase="mydatabase" it should look like this:
$servername = "servername";
$username = "username";
$password = "password";
$dbname = "dbname";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connection ok!";
} catch (PDOException $e) {
echo "Err: " . $e->getMessage();
}
$conn = null;
this will work.
More details on: http://www.w3schools.com/php/php_mysql_connect.asp
I had the same error, and it was because instead of using dbname=$dbname in string i used $dbname=$dbname, just a typo. You need to write the string correctly !
I faced same problem. Resolution of problem was removed the space between hostname and dbname variable as follows:
From:
$conn = new PDO("mysql:host = $servername;dbname = $dbname", $username, $password);
To:
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
What tripped me up was that I copied the database name from the tree in MySQL workbench and pasted it into the settings.php file.
Turns out that the apostrophes at the beginning and end of the string are fake apostrophes! I deleted them and put in real apostrophes and everything fired right up. Took me several hours to figure this out.
Hope this helps someone else.
Use
$database -> query(' SELECT * FROM "database_name"."table_name" ');
instead of
$database -> query(' SELECT * FROM "table_name" ');