我对PDO有问题,我完全看不出他来了哪里。我不能质疑我的MySQL数据库。为了测试,我使用了以下代码(之前为连接配置了一些参数):
$dbh= new PDO('mysql:host=serverName;dbname=Mydatabase','user','password');
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
var_dump($dbh); // gives : object(PDO)#1 (0) { }
$res=$dbh->query('SELECT * FROM table');
MySQL的连接是正确的,但在查询后我得到了这个错误:
致命错误:未捕获异常"PDOException",消息为"SQLSTATE[3D000]:无效目录名:1046未选择数据库"in/home/outout/public_html/file.php:16堆栈跟踪:#0/home/oout/public_html/filephp(16):PDO->在第16行的/home/outout/public_html/file.php中抛出了query('select*fromt..)#1{main}。
该代码在本地机器上运行,但我一将其联机(cPanel),就会显示此错误。我必须在.htaccess中配置PDO吗?
我完全不明白问题出在哪里。有人会有个主意吗?
您犯了一些错误或拼写错误。确保数据库存在于您连接的服务器上,并在DSN中正确设置,如
dbname=Mydatabase;
没有空格或其他符号。字符大小写也很重要。
$dbh = new PDO('mysql:host=serverName;dbname=Mydatabase;charset=utf8mb4','user','pass');
应该工作
我遇到了同样的问题,但没有用'mysql'(mysql:host)提及'host'字符串。我通过以下代码解决了这个问题。
$dsn="mysql:host=localhost;dbname=dbname";
$pdo = new PDO($dsn,"root","");
代替:
$res=$dbh->query('SELECT * FROM table');
只需:
$res=$dbh->query('SELECT * FROM dbname.tablename');
你可以走了。
我也遇到了同样的问题。问题的解决方案删除了hostname和dbname变量之间的空格,如下所示:发件人:$conn=新PDO("mysql:host=$servername;dbname=$dbname",$username,$password);
收件人:$conn=新PDO("mysql:host=$servername;dbname=$dbname",$username,$password);
让我感到困惑的是,我从MySQL工作台的树中复制了数据库名称,并将其粘贴到settings.php文件中。原来字符串开头和结尾的撇号是假的撇号!我删除了它们,并加上了真正的撇号,一切都很顺利。我花了几个小时才弄明白。希望这能帮助其他人。
使用关键字same dbname不要更改它们
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;
}
$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,只是一个拼写错误。你需要正确地写字符串!
对于任何面临相同问题的人,在dsn中,如果在dbname之前键入port,它会给出相同的错误
所以更换
$dsn = "mysql:host=$this->host;port:$this->port;dbname=$this->db;charset=UTF8;";
带有
$dsn = "mysql:host=$this->host;dbname=$this->db;port:$this->port;charset=UTF8;";
注意port和dbname
使用
$database -> query(' SELECT * FROM "database_name"."table_name" ');
而不是
$database -> query(' SELECT * FROM "table_name" ');