我有PDO的问题,我绝对不知道他来的地方。我无法质疑我的MySQL数据库。只是为了测试我使用了下面的代码(以前配置的连接参数非常糟糕:
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');
与MySQL正确连接,但在查询后我收到此错误:
致命错误:未捕获的异常' PDOException'消息' SQLSTATE [3D000]:无效的目录名称:1046未选择数据库'在/home/outout/public_html/file.php:16堆栈跟踪:#0 /home/outout/public_html/file.php(16):PDO->查询(' select * from t ...& #39;)在第16行的/home/outout/public_html/file.php中抛出#1 {main}。
代码适用于本地计算机,但只要我将其置于联机状态(cPanel),就会显示此错误。我是否必须在.htaccess中配置PDO?
我绝对不明白问题出在哪里。有人会有想法吗?
答案 0 :(得分:10)
帮助Mysql解析句柄。
而不是:
$res=$dbh->query('SELECT * FROM table');
尝试:
$res=$dbh->query('SELECT * FROM Mydatabase.table');
答案 1 :(得分:2)
我遇到同样的问题,但是没有用'mysql'(mysql:host)提及'host'字符串。我通过遵循以下代码解决了这个问题。
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;
}
}
答案 2 :(得分:1)
而不是:
$res=$dbh->query('SELECT * FROM table');
只是这样做:
$res=$dbh->query('SELECT * FROM dbname.tablename');
你会很高兴。
答案 3 :(得分:0)
$dbh= new PDO('mysql:host=serverName;dbname=Mydatabase','user','password');
这是错误的。你不能拥有host = serverName,而是需要像host = $ serverName,然后是$ serverName =“servername.domanin”;与dbname = Mydatabase相同,你需要制作那些变量,$ Mydatabase =“mydatabase”它应该是这样的:
$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;
这会奏效。 有关详细信息:http://www.w3schools.com/php/php_mysql_connect.asp
我有同样的错误,这是因为我没有在字符串中使用dbname = $ dbname而是使用$ dbname = $ dbname,只是一个错字。你需要正确地写出字符串!
答案 4 :(得分:0)
让我感到震惊的是,我从MySQL工作台中的树中复制了数据库名称,并将其粘贴到settings.php文件中。 原来,字符串开头和结尾的撇号都是假撇号!我删除了它们,并放入真实的撇号,然后一切都正常运行了。花了我几个小时来解决这个问题。 希望这对其他人有帮助。
答案 5 :(得分:0)
使用关键字相同的数据库名不要改变它们
public function conect(){
$this->conn = null;
try {
$this->conn = new PDO('mysql:host='.$this->host.';dbname='.$this->db_name, $this->username, $this->password);
// $this->conn = new PDO('mysql:host=' . $this->host . ';dbname=' . $this->db_name, $this->username, $this->password);
$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo 'Connection Error: ' . $e->getMessage();
}
return $this->conn;
}
答案 6 :(得分:-2)
使用
$database -> query(' SELECT * FROM "database_name"."table_name" ');
而不是
$database -> query(' SELECT * FROM "table_name" ');