iT邦幫忙

0

Ubuntu 使用 PDO 無法連上 MySQL

php
  • 分享至 

  • xImage

我使用 Virtual Box 安裝 Ubuntu 20.04 版
我使用 apt update && apt install mysql-server 安裝 MySQL
我使用 apt update && apt install apache2 安裝 apache
我使用 apt update && apt install php 安裝 php
我使用 apt update && apt install libapache2-mod-php php-mysql 安裝相關套件
我使用 apt update && apt install phpmyadmin 安裝 phpmyadmin 並用其匯入資料表
但使用 php 的 PDO 語法連接資料庫卻連不上,我是新手,請救救我吧!

  //login.php
  $host = "localhost";    // Change as necessary
  $data = "onlineshop"; // Change as necessary
  $user = "root";         // Change as necessary
  $pass = "password";        // Change as necessary
  $chrs = "utf8mb4";
  $attr = "mysql:host=$host;dbname=$data;charset=$chrs";
  $opts =
  [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
  ];
  require_once "login.php";

  try {
     $pdo = new PDO ($attr, $user, $pass, $opts);
     $query = "SHOW TABLES";
     $result = $pdo->query ($query);
  } catch (PDOException $e) {
     throw new PDOException ($e->getMessage (), (int) $e->getCode ());
  }
看更多先前的討論...收起先前的討論...
淺水員 iT邦大師 6 級 ‧ 2023-08-11 08:49:55 檢舉
有錯誤訊息嗎?那通常能告訴我們很多東西
poemnite iT邦研究生 2 級 ‧ 2023-08-11 10:56:00 檢舉
先用
# php -m | grep PDO
看一下 pdo 模組有沒有載入
沒載入就要去修改相對應的 php.ini
根據你的 php 版本不同,
通常在 /etc/php 目錄下有相對應版本的 php.ini
改好後重啟 apache2 讓它載入
To [淺水員] : 錯誤訊息是 "Get http://localhost/ 500 (Internal Server Error)"
To [poemnite] : 有看到 PDO 唷
請各位大神再幫幫忙吧!我想面試的職缺要求 Linux 技能
kennex_x iT邦新手 4 級 ‧ 2023-08-11 16:46:26 檢舉
https://blog.tarswork.com/post/quick-start-operation-mysql-using-php-pdo/
參考一下這篇文章=)
從錯誤訊息來看,不確定是不是跟你沒有設定port有關呢?
BTW, "localhost" 也改成 "127.0.0.1" 試試看 =)
To [kennex] : 設定 Port 為 80 (有用$ netstat -tulpn | grep :80 檢查過) 並且設定 127.0.0.1 但是情況未改善
To [everybody] : 有發現初次載入時有兩則錯誤訊息如下
1. "Failed to load resource: the server responded with a status of 404 (Not Found)"
2. "Failed to load resource: the server responded with a status of 500 (Internal Server Error)"
各位大神如果有甚麼 idea 請再幫我灌頂吧!
To [各位大神] : 因為我看 Ubuntu apache2 的 log 發現有如下的錯誤訊息
"Fatal error: Uncaught PDOException: SQLSTATE[HY000] [1698] Access denied for user 'root'@'localhost'"
我認為是我 root 的權限不夠,上網 google 情況並不樂觀,所以我會另外開一個 mysql 的 tag 來問,在此感謝各位的回答,IT 領域真是舉步維艱啊!
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
kennex_x
iT邦新手 4 級 ‧ 2023-08-11 16:53:14

ANS From ChatGPT

根據你提供的程式碼,我看到了一個可能導致問題的地方:你在 login.php 中又 require_once 了自身,這可能會引起無限迴圈和內存耗盡的情況。你應該確保在 login.php 中不要再次引入自己。
假設你的程式碼存在於兩個不同的檔案中:一個是 login.php(包含了資料庫連接相關的程式碼),另一個是其他檔案(比如 index.php),它使用 login.php 中定義的資料庫連接。

以下是你的程式碼的修正版,以確保不再出現無限迴圈:

login.php:

<?php
$host = "localhost";    // Change as necessary
$data = "onlineshop";   // Change as necessary
$user = "root";         // Change as necessary
$pass = "password";     // Change as necessary
$chrs = "utf8mb4";
$attr = "mysql:host=$host;dbname=$data;charset=$chrs";
$opts = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];

try {
    $pdo = new PDO($attr, $user, $pass, $opts);
} catch (PDOException $e) {
    throw new PDOException($e->getMessage(), (int) $e->getCode());
}

index.php:

<?php
require_once "login.php";

try {
    $query = "SHOW TABLES";
    $result = $pdo->query($query);
    // ... Handle the query result here
} catch (PDOException $e) {
    // ... Handle the exception here
}

請確保以上修正並避免循環引用。如果問題仍然存在,請確認你的伺服器日誌以獲取更多關於500內部伺服器錯誤的資訊。

感謝您的回覆,因為我的網頁在 Windows 可以跑所以應該不是無窮迴圈的問題,但我有下載 Chrome 瀏覽器以確保 Windows 和 Ubuntu 使用的環境是一樣的。伺服器日誌的部份我再研究一下!

0

我剛好在這篇回答 https://ithelp.ithome.com.tw/questions/10213883
因該也是跟你有關的答案。我就不重覆再這邊貼了。你自行去看。

我要發表回答

立即登入回答