PDO错误我不知道如何修复

时间:2014-12-27 07:50:49

标签: php mysql pdo

我有这个错误

  

致命错误:未捕获的异常' 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}抛出

con.inc.php 中的

<?
$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服务器。 如果任何人可以请修理它。 谢谢:))

2 个答案:

答案 0 :(得分:4)

如错误所示,您没有选择活动数据库。原因是您的DSN字符串中的名称已关闭。特别是,Database应为dbnameserver应为host(而当前值有效,因为它默认为localhost,可能是 - dbname是给你的错误)。请务必使用实际格式,不要创建自己的名称。

请参阅PDO_MYSQL DSN for the correct format

答案 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;')连接到数据库;