【问题标题】:PDO Error I don't know how to fixPDO 错误我不知道如何解决
【发布时间】:2014-12-27 07:50:49
【问题描述】:

我有这个错误

致命错误:未捕获的异常“PDOException”和消息“SQLSTATE[3D000]:无效的目录名称:1046 未选择数据库”在 /srv/users/wiput/apps/gallery/public/auth.php:56 堆栈跟踪: #0 /srv/users/wiput/apps/gallery/public/auth.php(56): PDOStatement->execute() #1 {main} 在 /srv/users/wiput/apps/gallery/public/auth 中抛出。 php 在第 56 行

在 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 服务器。 如果有人可以请修复它。 谢谢你:)

【问题讨论】:

    标签: php mysql pdo


    【解决方案1】:

    正如错误所说,您没有选择活动数据库。原因是您在 DSN 字符串中的姓名不正确。特别是,Database 应该是 dbnameserver 应该是 host (虽然当前值有效,因为它默认为 localhost,可能 - dbname 是给你错误的原因)。一定要使用实际的格式,不要发明自己的名字。

    PDO_MYSQL DSN for the correct format

    【讨论】:

    • 我能再请你帮忙吗? > 回声“嗨! ', $data['名字'];此行我无法显示此数据。
    • @wiput1999 如果您需要更多答案,请创建一个新问题 - 原因是 fetchAll 返回一个索引数组 - 每行一个。试试$data[0]['firstname']
    【解决方案2】:

    要添加更多内容,这是因为您的数据库无法选择。 可能是各种原因。 试试这个:$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 ->exec('USE gallery;'); 连接到数据库;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-31
      • 1970-01-01
      • 2016-05-16
      • 1970-01-01
      • 2023-01-12
      • 1970-01-01
      • 2015-01-11
      • 2022-12-07
      相关资源
      最近更新 更多