使用 XAMPP 和 Workbench 的带有 PDO 的 PHP [重复]

Posted

技术标签:

【中文标题】使用 XAMPP 和 Workbench 的带有 PDO 的 PHP [重复]【英文标题】:PHP with PDO using XAMPP and Workbench [duplicate] 【发布时间】: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 【参考方案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。但是找不到驱动程序的错误依然存在。 嗯...您的路径可能有问题。检查此答案以查看是否有帮助:***.com/questions/25948767/… 扩展目录的路径是正确的(并且设置为绝对路径)。这两个扩展都在这个目录中。 @JennyG。添加了一些代码以尝试获取有关错误的更多信息。

以上是关于使用 XAMPP 和 Workbench 的带有 PDO 的 PHP [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用带有 INSERT 语句的 MySQL Workbench 导出数据库

MySQL Workbench "fetching..." -- 无法浏览数据库

MySQL Workbench 不兼容/非标准服务器

带有 Wordpress 的 XAMPP 运行速度太慢

设置mySql server和Xampp现在需要了解基本的安全性

设置mySql server和Xampp现在需要了解基本的安全性