con.inc.php 中的致命错误:未捕获的异常' PDOException'消息' SQLSTATE [3D000]:无效的目录名称:1046未选择数据库'在/srv/users/wiput/apps/gallery/public/auth.php:56堆栈跟踪:#0 /srv/users/wiput/apps/gallery/public/auth.php(56):PDOStatement->执行( )第56行/srv/users/wiput/apps/gallery/public/auth.php中#1 {main}抛出
<?
$db_server = "localhost";
$db_user = "gallery";
$db_password = "<censored>";
$db_name = "gallery";
$conn = new PDO("mysql:server=$db_server;Database=$db_name",$db_user,$db_password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
?>
在auth.php中<?
ob_start();
session_start();
//Global Variable
$username = $_REQUEST["username"];
$password = $_REQUEST["password"];
//Convert to MD5
$md5_pw = md5($password);
//Check Blank form
if($username == '')
{
$_SESSION["error"] = 2;
header("location:index.php");
}
elseif($password == '')
{
$_SESSION["error"] = 3;
header("location:index.php");
}
else
{
//Connect file
require("con.inc.php");
//Check data
$sql = "SELECT * FROM member WHERE username= :username AND password= :md5_pw ";
$result = $conn->prepare($sql);
$result->bindValue(':username', $username);
$result->bindValue(':md5_pw', $md5_pw);
$result->execute();
$data = $result->fetchAll( PDO::FETCH_ASSOC );
if ($data !== false)
{
echo 'Hi! ', $data['firstname'];
}
else
{
$_SESSION["error"] = 1;
header("location:index.php");
}
}
?>
我使用带有PHP 5.6的serverpilot Web服务器。 如果任何人可以请修理它。 谢谢:))
答案 0 :(得分:4)
如错误所示,您没有选择活动数据库。原因是您的DSN字符串中的名称已关闭。特别是,Database
应为dbname
而server
应为host
(而当前值有效,因为它默认为localhost,可能是 - dbname是给你的错误)。请务必使用实际格式,不要创建自己的名称。
答案 1 :(得分:1)
要为此添加更多内容,这是因为无法选择您的数据库。
可能有各种原因。
试试这个:$conn = new PDO("mysql:host=$db_server;dbname=$db_name",$db_user,$db_password);
而不是$conn = new PDO("mysql:server=$db_server;Database=$db_name",$db_user,$db_password);
,看它是否作为服务器工作假设是主机,而数据库假设是dbname。
我通常通过这个$ conn - &gt; exec('USE gallery;')连接到数据库;