Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
网站的PHP文件显示错误:找不到驱动程序_Php_Sql_Pdo_Driver - Fatal编程技术网

网站的PHP文件显示错误:找不到驱动程序

网站的PHP文件显示错误:找不到驱动程序,php,sql,pdo,driver,Php,Sql,Pdo,Driver,我正在为我的投资组合网站创建一个博客,我正在从头开始开发它。我已经连接了我的数据库,连接在那里,但它说找不到驱动程序 我已经阅读了几个小时所有其他的帖子,没有一个答案解决了我的问题。我已经下载了实际的文件,说它们是驱动程序,我已经从php.ini文件中去掉了分号,我一遍又一遍地修改我的代码以检查拼写错误,我已经检查以确保所有驱动程序都已加载并在我的PHPinfo页面上工作 我觉得我忘记了帮助回答这个问题的一条关键信息,但什么都没想到。如果我想到其他事情,我会更新的。提前谢谢你 <?php

我正在为我的投资组合网站创建一个博客,我正在从头开始开发它。我已经连接了我的数据库,连接在那里,但它说找不到驱动程序

我已经阅读了几个小时所有其他的帖子,没有一个答案解决了我的问题。我已经下载了实际的文件,说它们是驱动程序,我已经从php.ini文件中去掉了分号,我一遍又一遍地修改我的代码以检查拼写错误,我已经检查以确保所有驱动程序都已加载并在我的PHPinfo页面上工作

我觉得我忘记了帮助回答这个问题的一条关键信息,但什么都没想到。如果我想到其他事情,我会更新的。提前谢谢你

<?php
ob_start();
session_start();

//database credentials
$hostname = "localhost";
$username = "root";
$password = "";
$dbname = "portfolio_blog.sql";
global $db;


function testdb_connect ($hostname, $username, $password){
    $db = new PDO('mysqli:host=$hostname;$dbname', $username, $password);
    return $db;
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}

try {
    $db = testdb_connect ($hostname, $username, $password);
    echo 'Connected to database';
}

    catch(PDOException $e) {
    echo $e->getMessage();
}

您遇到了一些问题:

  • 司机问题
  • 驱动程序名为
    mysql
    ,您已经输入了
    mysqli
    mysqli
    是PHP的一个扩展,它取代了旧的、过时的
    mysql
    扩展。不幸的是,这两者都与PDO无关

    您正在寻找的驱动程序是
    mysql
    。第一个更改是更改mysqli:host=$hostname$dbname'
    'mysql:host=$hostname$dbname'

  • '
    '
  • 您使用的是一个单引号,但看起来您试图在dsn字符串中使用
    $hostname
    $dbname
    的值。如果您想使用这些变量,则需要对PHP使用双引号来执行替换。使用单引号通常会将
    $hostname
    $dbname
    放入参数中

    第二个变化来自mysql:host=$hostname$dbname'到“mysql:host=$hostname;$dbname”

  • $dbname
    未定义
  • 你需要在范围内完成

    function testdb_connect ($hostname, $username, $password, $dbname){
        $db = new PDO("mysql:host=$hostname;$dbname", $username, $password);
        return $db;
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
    
  • DSN正在查找数据库名称。不是SQL文件
  • $dbname
    “portfolio\u blog.sql”
    表示您正在尝试加载
    .sql
    文件。您需要提供数据库的名称。我不知道那是什么,所以你可能需要把它放在你自己身上

    我想您需要更改DSN才能再次处理此问题

    例如,假设数据库名称为
    portfolio\u blog

    $dbname=“portfolio\u blog”

    “mysql:host=$hostname;dbname=$dbname”


    我建议这样做:

    <?php
    ob_start();
    session_start();
    
    //database credentials
    $hostname = "localhost";
    $username = "root";
    $password = "";
    $dbname = "portfolio_blog";
    global $db;
    
    
    function testdb_connect ($hostname, $username, $password, $dbname){
        $db = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        return $db;
    }
    
    try {
        $db = testdb_connect ($hostname, $username, $password, $dbname);
        echo 'Connected to database';
    }
    
        catch(PDOException $e) {
        echo $e->getMessage();
    }
    

    我没有足够的信心将此作为答案发布,但是:如果您在dsn中将
    mysqli
    更改为
    mysql
    ,会发生什么?(
    'mysql:host=$hostname;$dbname'
    )此外,如果您复制/粘贴从PHP获得的确切错误,这将非常有帮助。实际上,它所说的只是在一个巨大的白色屏幕上“找不到驱动程序”。我会试试你的建议。我做了更改,只是去掉了'I',这是它抛出的错误:“SQLSTATE[HY000][2002]php_network_getaddresses:getaddrinfo失败:没有这样的主机是已知的。”应该是
    新的PDO(“mysqli:host=$hostname;dbname=$dbname”、$username,$password)?您需要使用双引号,以便PHP能够验证stringGood aim中的变量,但您也有一些问题:返回$db;在$db->setAttribute之前。全局$db在全局范围内没有意义。echo$e->getMessage();不是。我感谢你的时间!!!我发现了这个错误,但天知道我还有很多问题要解决。谢谢你帮助我!