Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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 如何正确连接MySQL数据库?_Php_Mysql_Pdo - Fatal编程技术网

Php 如何正确连接MySQL数据库?

Php 如何正确连接MySQL数据库?,php,mysql,pdo,Php,Mysql,Pdo,我正在尝试将MySQL连接到我的PHP程序。数据库已正确连接,因为它未显示任何数据库连接错误消息。但是当我试图从表中获取数据时,输出不会显示任何输出。它留下一个空白屏幕。也不会显示任何错误消息。它只显示“数据库连接成功” <?php define('user', 'root'); define('pwd', ''); $dsn = "mysql:host=localhost:3307;db_name=mydatabase"; try{ $db = new PDO($ds

我正在尝试将MySQL连接到我的PHP程序。数据库已正确连接,因为它未显示任何数据库连接错误消息。但是当我试图从表中获取数据时,输出不会显示任何输出。它留下一个空白屏幕。也不会显示任何错误消息。它只显示“数据库连接成功”

    <?php 
define('user', 'root');
define('pwd', '');

$dsn = "mysql:host=localhost:3307;db_name=mydatabase";
try{
    $db = new PDO($dsn,user,pwd);
    echo "Database connected successfully";
    $query = "SELECT * FROM student_detail";
    $statementss = $db->prepare($query);
    $statementss->execute();
    $detail = $statementss->fetchAll();
    foreach ($detail as $student) {
        echo $student['Name']." ";
        echo $student['Address']." ";
        echo $student['Age']." ";
        echo $student['Phone']." ";
        echo "<br>";
    }
    $statementss->closeCursor();

}
catch(Exception $e){
    echo $e->getMessage()."<br>";
}
?>

不清楚数据库中是否有任何值,但我现在将解释如何使用PHP中的PDO扩展正确连接到MySQL数据库

打开DB连接时,您需要始终执行以下三项操作:

  • 启用错误报告。在PDO中,您可以传递包含
    \PDO::ATTR_ERRMODE=>\PDO::ERRMODE_EXCEPTION
    的数组以启用错误报告
  • 设置正确的字符集。最常见的是
    utf8mb4
    。如果您使用的是
    utf8
    ,我强烈建议您尽快切换
  • 创建PDO的实例
  • 只有当您知道为什么需要这样做时,才应该捕获异常。不要把所有的东西都包在试抓里;这是个糟糕的主意。尤其不要仅仅为了回显错误消息而捕获异常;这是毫无意义的。但是,您可以包装
    newpdo()line,然后在
    catch
    块中抛出自定义异常

    数据库名称的键值对的名称是
    dbname
    ,而不是
    db\u name
    。另外,在指定端口时,DSN中有一个单独的键值对专用于该端口。您的问题可能是因为您连接到了错误的端口,或者因为无法识别
    db\u名称

    您的固定代码如下所示:

    <?php
    
    define('user', 'root');
    define('pwd', '');
    
    $dsn = "mysql:host=localhost;port=3307;dbname=mydatabase;charset=utf8mb4";
    $db = new \PDO($dsn, user, pwd, [
        \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
        \PDO::ATTR_EMULATE_PREPARES => false,
    ]);
    
    echo "Database connected successfully";
    
    $query = "SELECT * FROM student_detail";
    $statementss = $db->prepare($query);
    $statementss->execute();
    $detail = $statementss->fetchAll();
    
    foreach ($detail as $student) {
        echo $student['Name']." ";
        echo $student['Address']." ";
        echo $student['Age']." ";
        echo $student['Phone']." ";
        echo "<br>";
    }
    

    不清楚数据库中是否有任何值,但我现在将解释如何使用PHP中的PDO扩展正确连接到MySQL数据库

    打开DB连接时,您需要始终执行以下三项操作:

  • 启用错误报告。在PDO中,您可以传递包含
    \PDO::ATTR_ERRMODE=>\PDO::ERRMODE_EXCEPTION
    的数组以启用错误报告
  • 设置正确的字符集。最常见的是
    utf8mb4
    。如果您使用的是
    utf8
    ,我强烈建议您尽快切换
  • 创建PDO的实例
  • 只有当您知道为什么需要这样做时,才应该捕获异常。不要把所有的东西都包在试抓里;这是个糟糕的主意。尤其不要仅仅为了回显错误消息而捕获异常;这是毫无意义的。但是,您可以包装
    newpdo()line,然后在
    catch
    块中抛出自定义异常

    数据库名称的键值对的名称是
    dbname
    ,而不是
    db\u name
    。另外,在指定端口时,DSN中有一个单独的键值对专用于该端口。您的问题可能是因为您连接到了错误的端口,或者因为无法识别
    db\u名称

    您的固定代码如下所示:

    <?php
    
    define('user', 'root');
    define('pwd', '');
    
    $dsn = "mysql:host=localhost;port=3307;dbname=mydatabase;charset=utf8mb4";
    $db = new \PDO($dsn, user, pwd, [
        \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
        \PDO::ATTR_EMULATE_PREPARES => false,
    ]);
    
    echo "Database connected successfully";
    
    $query = "SELECT * FROM student_detail";
    $statementss = $db->prepare($query);
    $statementss->execute();
    $detail = $statementss->fetchAll();
    
    foreach ($detail as $student) {
        echo $student['Name']." ";
        echo $student['Address']." ";
        echo $student['Age']." ";
        echo $student['Phone']." ";
        echo "<br>";
    }
    

    检查服务器错误日志,查看是否有错误。是否100%确定该表包含数据?您可能会收到任何php警告/通知吗@SamiKuhmonen不,没关系,他在脚本开始时定义了常量。检查服务器错误日志,看看是否有错误。你100%确定表中包含数据吗?您可能会收到任何php警告/通知吗@SamiKuhmonen不,没关系,他在脚本的开头定义了常量。