[php-src] Issue #12251: odbc_pconnect fails with special characters
| From: | kevinreniers | Date: | Wed, 20 Sep 2023 14:22:16 +0000 |
| Subject: | [php-src] Issue #12251: odbc_pconnect fails with special characters | ||
| Groups: | php.bugs | ||
| Request: | Send a blank email to php-bugs+get-245402@lists.php.net to get a copy of this message | ||
Issue: https://github.com/php/php-src/issues/12251
Author: kevinreniers
### Description
Hello, we're trying to upgrade from PHP 8.1 to PHP 8.2.10. We integrate with an MSSQL server
using FreeTDS/unixODBC and ext/odbc. After upgrading, the same code that worked on PHP 8.1 now fails
on PHP 8.2.
I assume that [Quote when appending username and password to the ODBC connection
string](https://github.com/php/php-src/pull/8307) is the cause of my issue.
The following code:
```php
<?php
namespace App\Connections;
use RuntimeException;
class OdbcConnection implements DatabaseConnectionInterface
{
private $connection;
public function __construct(private readonly string $dsn, private readonly string $username,
private readonly string $password)
{
}
/**
* @throws RuntimeException
*/
public function connect(): void
{
$this->connection = odbc_pconnect($this->dsn, $this->username, $this->password);
}
}
$conn = new
OdbcConnection('Driver=FreeTDS;Server=myserver.local;Port=1433;Database=MyDatabase',
'user', 'foo(bar(');
$conn->connect();
```
Resulted in this output:
```
In OdbcConnection.php line 20:
[ErrorException]
Warning: odbc_pconnect(): SQL error: [FreeTDS][SQL Server]Unable to connect to data source, SQL
state S1000 in SQLConnect
```
But I expected this output instead:
```
No error, works fine in PHP 8.1.
```
I can workaround the issue in my local development setup by creating an entry in
/etc/odbc.ini and then only passing the section name to the $dsn
parrameter of odbc_pconnect like so:
```
# /etc/odbc.ini
[sv1]
Driver=FreeTDS
Server=myserver.local
Port=1433
Database=MyDatabase
```
```php
<?php
odbc_pconnect('sv1', 'user', 'foo(bar(');
```
Ideally, it would help me the most if I can make it work as-is without any workaround. It's not
practical (but not impossible) to apply the /etc/odbc.ini workaround in my
infrastructure. It would delay our upgrade significantly though.
Thank you in advance!
### PHP Version
PHP 8.2.10
### Operating System
RHEL 8.8, Debian Bullseye