I tried to connect to AS400 using Php Slim Framework. It returned to me an error about odbc connection php function. I edited this framework files this way.
SETTINGS.PHP
<?php
declare(strict_types=1);
use App\Application\Settings\Settings;
use App\Application\Settings\SettingsInterface;
use DI\ContainerBuilder;
use Monolog\Logger;
return function (ContainerBuilder $containerBuilder) {
// Global Settings Object
$containerBuilder->addDefinitions([
SettingsInterface::class => function () {
return new Settings([
'displayErrorDetails' => true, // Should be set to false in production
'logError' => false,
'logErrorDetails' => false,
'logger' => [
'name' => 'slim-app',
'path' => isset($_ENV['docker']) ? 'php://stdout' : __DIR__ . '/../logs/app.log',
'level' => Logger::DEBUG,
],
"db" => [
'name' => 'EDDXXXXXXX',
'username' => 'XXXXXXX',
'password' => 'XXXXXXXX',
'connection' => 'xxxxxx.xxx.xxxxx'
]
]);
}
]);
};
DEPENDENCIES.PHP
<?php
declare(strict_types=1);
use App\Application\Settings\SettingsInterface;
use DI\ContainerBuilder;
use Monolog\Handler\StreamHandler;
use Monolog\Logger;
use Monolog\Processor\UidProcessor;
use Psr\Container\ContainerInterface;
use Psr\Log\LoggerInterface;
return function (ContainerBuilder $containerBuilder) {
$containerBuilder->addDefinitions([
LoggerInterface::class => function (ContainerInterface $c) {
$settings = $c->get(SettingsInterface::class);
$loggerSettings = ...........CODE HERE ..........
return $logger;
},
PDO::class => function (ContainerInterface $c) {
$settings = $c->get(SettingsInterface::class);
$dbSettings = $settings->get('db');
$name = $dbSettings['name'];
$username = $dbSettings['username'];
$password = $dbSettings['password'];
$dsn = "Driver={Client Access ODBC Driver (32-bit)};System=" .
$connection . ";libraries=" . $name .
";naming=system;transaction isolation=read committed;Uid=" .
$username .";Pwd=" . $password . ";";
//return new PDO($dsn, $username, $password);
return odbc_connect($dsn, $username, $password);
},
]);
};
ROUTES.PHP
$app->get('/db-test', function (Request $request, Response $response) {
$db = $this->get(PDO::class);
$sth = $db->prepare("SELECT * FROM XXXX");
$sth->execute();
$data = $sth->fetchAll(PDO::FETCH_ASSOC);
$payload = json_encode($data);
$response->getBody()->write($payload);
return $response->withHeader('Content-Type', 'application/json');
});
When i call /db-test I obtain this server error
"statusCode": 500,
"error": {
"type": "SERVER_ERROR",
"description": "ERROR: odbc_connect(): SQL error: [Microsoft][Driver Manager ODBC] Nome origine dati non trovato e driver predefinito non specificato., SQL state IM002 in SQLConnect on line 46 in file C:\\slim\\as400\\app\\dependencies.php."
}
I don't understand why it gives to me that error.