Php 如何正确连接MySQL数据库?
我正在尝试将MySQL连接到我的PHP程序。数据库已正确连接,因为它未显示任何数据库连接错误消息。但是当我试图从表中获取数据时,输出不会显示任何输出。它留下一个空白屏幕。也不会显示任何错误消息。它只显示“数据库连接成功”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
<?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::ATTR_ERRMODE=>\PDO::ERRMODE_EXCEPTION
的数组以启用错误报告utf8mb4
。如果您使用的是utf8
,我强烈建议您尽快切换李>
newpdo()如果您对安全性有疑虑,请在try catch中使用code>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()如果您对安全性有疑虑,请在try catch中使用code>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不,没关系,他在脚本的开头定义了常量。