Skip to content

Commit 7a583c5

Browse files
committed
Fix PHP 8.5 compatibility issue with MySQL driver.
1 parent 1be9a6c commit 7a583c5

File tree

1 file changed

+42
-11
lines changed

1 file changed

+42
-11
lines changed

system/database/drivers/pdo/subdrivers/pdo_mysql_driver.php

Lines changed: 42 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -143,34 +143,65 @@ public function db_connect($persistent = FALSE)
143143

144144
if ( ! empty($sql))
145145
{
146-
if (empty($this->options[PDO::MYSQL_ATTR_INIT_COMMAND]))
146+
if (class_exists('Pdo\\Mysql'))
147147
{
148-
$this->options[PDO::MYSQL_ATTR_INIT_COMMAND] = 'SET SESSION sql_mode = '.$sql;
148+
$constant = constant('Pdo\\Mysql::ATTR_INIT_COMMAND');
149+
} else {
150+
$constant = PDO::MYSQL_ATTR_INIT_COMMAND;
151+
}
152+
153+
if (empty($this->options[$constant]))
154+
{
155+
$this->options[$constant] = 'SET SESSION sql_mode = '.$sql;
149156
}
150157
else
151158
{
152-
$this->options[PDO::MYSQL_ATTR_INIT_COMMAND] .= ', @@session.sql_mode = '.$sql;
159+
$this->options[$constant] .= ', @@session.sql_mode = '.$sql;
153160
}
154161
}
155162
}
156163

157164
if ($this->compress === TRUE)
158165
{
159-
$this->options[PDO::MYSQL_ATTR_COMPRESS] = TRUE;
166+
if (class_exists('Pdo\\Mysql'))
167+
{
168+
$constant = constant('Pdo\\Mysql::ATTR_COMPRESS');
169+
} else {
170+
$constant = PDO::MYSQL_ATTR_COMPRESS;
171+
}
172+
173+
$this->options[$constant] = TRUE;
160174
}
161175

162176
if (is_array($this->encrypt))
163177
{
178+
if (class_exists('Pdo\\Mysql'))
179+
{
180+
$sslKey = constant('Pdo\\Mysql::ATTR_SSL_KEY');
181+
$sslCert = constant('Pdo\\Mysql::ATTR_SSL_CERT');
182+
$sslCA = constant('Pdo\\Mysql::ATTR_SSL_CA');
183+
$sslCAPath = constant('Pdo\\Mysql::ATTR_SSL_CAPATH');
184+
$sslCipher = constant('Pdo\\Mysql::ATTR_SSL_CIPHER');
185+
$verify = constant('Pdo\\Mysql::ATTR_SSL_VERIFY_SERVER_CERT');
186+
} else {
187+
$sslKey = PDO::MYSQL_ATTR_SSL_KEY;
188+
$sslCert = PDO::MYSQL_ATTR_SSL_CERT;
189+
$sslCA = PDO::MYSQL_ATTR_SSL_CA;
190+
$sslCAPath = PDO::MYSQL_ATTR_SSL_CAPATH;
191+
$sslCipher = PDO::MYSQL_ATTR_SSL_CIPHER;
192+
$verify = defined('PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT') ? PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT : null;
193+
}
194+
164195
$ssl = array();
165-
empty($this->encrypt['ssl_key']) OR $ssl[PDO::MYSQL_ATTR_SSL_KEY] = $this->encrypt['ssl_key'];
166-
empty($this->encrypt['ssl_cert']) OR $ssl[PDO::MYSQL_ATTR_SSL_CERT] = $this->encrypt['ssl_cert'];
167-
empty($this->encrypt['ssl_ca']) OR $ssl[PDO::MYSQL_ATTR_SSL_CA] = $this->encrypt['ssl_ca'];
168-
empty($this->encrypt['ssl_capath']) OR $ssl[PDO::MYSQL_ATTR_SSL_CAPATH] = $this->encrypt['ssl_capath'];
169-
empty($this->encrypt['ssl_cipher']) OR $ssl[PDO::MYSQL_ATTR_SSL_CIPHER] = $this->encrypt['ssl_cipher'];
196+
empty($this->encrypt['ssl_key']) OR $ssl[$sslKey] = $this->encrypt['ssl_key'];
197+
empty($this->encrypt['ssl_cert']) OR $ssl[$sslCert] = $this->encrypt['ssl_cert'];
198+
empty($this->encrypt['ssl_ca']) OR $ssl[$sslCA] = $this->encrypt['ssl_ca'];
199+
empty($this->encrypt['ssl_capath']) OR $ssl[$sslCAPath] = $this->encrypt['ssl_capath'];
200+
empty($this->encrypt['ssl_cipher']) OR $ssl[$sslCipher] = $this->encrypt['ssl_cipher'];
170201

171-
if (defined('PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT') && isset($this->encrypt['ssl_verify']))
202+
if ($verify && isset($this->encrypt['ssl_verify']))
172203
{
173-
$ssl[PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT] = $this->encrypt['ssl_verify'];
204+
$ssl[$verify] = $this->encrypt['ssl_verify'];
174205
}
175206

176207
// DO NOT use array_merge() here!

0 commit comments

Comments
 (0)