【问题标题】:PHP with PDO using XAMPP and Workbench [duplicate]使用 XAMPP 和 Workbench 的带有 PDO 的 PHP [重复]
【发布时间】:2018-01-07 12:35:27
【问题描述】:

我是 PHP 的初学者,我正在尝试使用 PDO 将我的应用程序与数据库连接起来。

$dbName = "new_schema";
$this->db = new PDO("mysql:host=localhost;dbname=$dbName", "root", "");

当我尝试运行我的应用程序时,这是浏览器的输出:

Fatal error: in C:\xampp\htdocs\Project\application\model-database.class.php on line 10

第 10 行是这样的:

$this->db = new PDO("mysql:host=localhost;dbname=$dbName", "root", "");

在 Workbench 中,Hostname 设置为 localhost,端口 3308 和用户名 root。没有密码。连接名称是本地实例mysqlweb

在 Xampp 中,Mysql 在端口 3308 上运行。

非常感谢您的帮助。 :)

编辑:

This is the browser output

现在,错误是找不到驱动程序

【问题讨论】:

  • 您遇到的致命错误是什么?
  • 信息不足
  • MySQL 默认端口是 3306。如果你使用另一个,你必须在你的 dns 字符串中定义它。
  • 谢谢。如何定义这个 DNS 字符串?
  • 这是你的DSN (Data Source Name)mysql:host=localhost;dbname=$dbName。添加;port=3308

标签: php mysql pdo xampp


【解决方案1】:

试试下面的代码:

$host       = '127.0.0.1'; //or localhost
$database   = 'mysql';
$port       = 3306;
$user       = 'root';
$password   = '';

try {
    $this->connection = new PDO($database . ":host=" . $host . ';port=' . $port, $user, $password);
    $this->connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    return $this->connection;
} catch (PDOException $e) {
    echo $e->getMessage();
}

【讨论】:

    【解决方案2】:

    您是否启用了 PHP.INI 文件中的驱动程序?

    在您的 PHP.INI 中搜索 extension=php_pdo.dllextension=php_pdo_mysql.dll 并删除它们前面的 ;。保存文件并重新启动 XAMPP 服务器。

    编辑


    我没有机会亲自运行它,而不是今天在我的开发机器上运行,但您可以尝试在新脚本中运行此代码,看看是否能获得有关错误的更多详细信息。我已将其设置为抛出和捕获错误,以及转储phpinfo() 页面以查看是否启用了 PDO 并显示了 MySQL 驱动程序。

    <?php
    
    class DBTest 
    {
        private $dbname;
        private $host;
        private $port;
        private $username;
        private $password;
        private $driver;
    
        private $db;
        
        public __construct($username, $password, $dbname = "", $host = "127.0.0.1", $port = 3306, $driver = "mysql")
        {
            $this->username = $username;
            $this->password = $password;
            $this->dbname = $dbname;
            $this->host = $host;
            $this->port = $port;
            $this->driver = $driver;
        }
        
        private function getDSN()
        {
            return sprintf("%s:host=%s;dbname=%s;port=%d", $this->driver, $this->host, $this->dbname, $this->port);
        }
    
        private function connect()
        {
            try
            {
                $this->db = new PDO($this->getDSN(), $this->username, $this->password);
                $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            } 
            catch (PDOException $e) 
            {
                print "Error!: " . $e->getMessage() . "<br/>";
                return false;
            }
    
            return true;
        }
    
        public function getRealised()
        {
            if($this->db == null)
            {
                return false;
            }
    
            $sql = "SELECT * FROM realised";
    
            try
            {
                $query = $this->db->prepare($sql); 
                $query->execute();
                while($row = $query->fetch(PDO::FETCH_ASSOC)) 
                {
                    print_r($row);
                }
            }
            catch(PDO_Exception $e)
            {
                print "Error!: " . $e->getMessage() . "<br/>";
                return false;
            }
    
            return true;
        }
    }
    
    $dbtest = new DBTest("root", "", "new_schema", "127.0.0.1", 3308, "mysql");
    print("Created object");
    
    if($dbtest->connect())
    {
        echo "Connected to DB";
    }
    
    if($dbtest->getRealised())
    {
        echo "Database queried";
    }
    
    phpinfo();
    

    【讨论】:

    • 感谢您的帮助。 extension=php_pdo_mysql.dll 已经存在,前面没有 ;。我添加了extension=php_pdo.dll 并重新启动了 XAMPP。但是找不到驱动程序的错误依然存在。
    • 嗯...您的路径可能有问题。检查此答案以查看是否有帮助:stackoverflow.com/questions/25948767/…
    • 扩展目录的路径是正确的(并且设置为绝对路径)。这两个扩展都在这个目录中。
    • @JennyG。添加了一些代码以尝试获取有关错误的更多信息。
    猜你喜欢
    • 2016-04-14
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 2020-01-06
    • 2014-02-03
    • 1970-01-01
    • 2014-07-14
    • 2013-03-13
    相关资源
    最近更新 更多