我对 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 未在 /home/outout/public_html/file.php:16 中选择数据库”堆栈跟踪:#0 /home/outout/public_html /file.php(16): PDO->query('select * from t...') #1 {main} throw in /home/outout/public_html/file.php on line 16.
代码可以在本地机器上运行,但是一旦我把它放到网上(cPanel),它就会显示这个错误。我必须在 .htaccess 中配置 PDO 吗?
我完全不明白问题出在哪里。有人会有想法吗?
你犯了一些错误或打字错误。确保数据库存在于您要连接到的服务器上,并像这样在DSN中正确设置
dbname=Mydatabase;
没有空格或其他符号。字符大小写也很重要。
$dbh = new PDO('mysql:host=serverName;dbname=Mydatabase;charset=utf8mb4','user','pass');
应该工作
我遇到了同样的问题,但没有提到带有“mysql”(mysql: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');
你会很高兴的。
我遇到了同样的问题。问题的解决方案删除了主机名和 dbname 变量之间的空格,如下所示: 从: $conn = new PDO("mysql:host = $servername;dbname = $dbname", $username, $password);
收件人: $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$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,这只是一个拼写错误。您需要正确编写字符串!
让我失望的是,我从 MySQL Workbench 的树中复制了数据库名称并将其粘贴到 settings.php 文件中。 原来字符串开头和结尾的撇号是假撇号!我删除了它们并放入了真正的撇号,一切都立即启动了。我花了几个小时才弄明白这一点。 希望这可以帮助别人。
使用关键字相同的数据库名称不要更改它们
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;
}
面对同样问题的人,如果你在 dbname 之前输入端口,在 dsn 中,它会给出同样的错误
所以更换
$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" ');