Error Message
Deprecated: Constant PDO::MYSQL_ATTR_SSL_CA is deprecated since 8.5,
use Pdo\\\\Mysql::ATTR_SSL_CA instead
in vendor/laravel/framework/config/database.php on line 61
Penyebab
PHP 8.5 mengganti constant PDO::MYSQL_ATTR_SSL_CA dengan Pdo\\\\Mysql::ATTR_SSL_CA.
Laravel versi lama masih menggunakan constant lama di file vendor/laravel/framework/config/database.php.
Cara Fix
File yang perlu diedit
vendor/laravel/framework/config/database.php
Yang perlu diganti
Cari baris ini (biasanya ada 2 tempat — di config mysql dan mariadb):
// ❌ SEBELUM (deprecated)
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
Ganti dengan:
// ✅ SESUDAH (compatible PHP 8.5+)
'options' => extension_loaded('pdo_mysql') ? array_filter([
(defined('Pdo\\\\Mysql::ATTR_SSL_CA') ? Pdo\\\\Mysql::ATTR_SSL_CA : PDO::MYSQL_ATTR_SSL_CA) => env('MYSQL_ATTR_SSL_CA'),
]) : [],
Lokasi pasti di file
| Koneksi | Line (kurang lebih) |
|---|---|
mysql |
~61 |
mariadb |
~81 |
Penjelasan Kode Fix
defined('Pdo\\\\Mysql::ATTR_SSL_CA')
? Pdo\\\\Mysql::ATTR_SSL_CA // PHP 8.5+ pakai constant baru
: PDO::MYSQL_ATTR_SSL_CA // PHP < 8.5 pakai constant lama
Kode ini mengecek apakah constant baru sudah ada. Jika ya, pakai yang baru. Jika tidak, fallback ke yang lama. Jadi compatible di semua versi PHP.
⚠️ Catatan Penting
- File ini ada di folder
vendor/, jadi akan ter-overwrite jika kamu jalankancomposer update. - Jika terjadi lagi setelah
composer update, ulangi langkah di atas. - Solusi permanen: update Laravel ke versi yang sudah support PHP 8.5 natively dengan
composer update laravel/framework.
No comments:
Post a Comment