#php #pdo #odbc #pervasive #pervasive-sql
#php #pdo #odbc #повсеместное #pervasive-sql
Вопрос:
Я пытаюсь установить соединение с моей базой данных Pervasive SQL works. Я пытался использовать odbc_connect (не сработало), но мне сказали, что PDO проще и лучше (ХА, тоже не сработало). Это моя строка подключения $dbh = new PDO("odbc:Driver={Pervasive ODBC Client Interface};ServerName=192.168.43.19;dbq=GLOBALTST");
Я пробовал odbc: DSNname (https://www.php.net/manual/en/ref.pdo-odbc.connection.php ), ODBC: имя сервера (ip и имя хоста) и odbc: имя базы данных. Ничего не сработало. Это ошибка, которую я получаю:
Fatal error: Uncaught PDOException: SQLSTATE[IM003] SQLDriverConnect: 160 Specified driver could not be loaded due to system error 1114: A dynamic link library (DLL) initialization routine failed. (Pervasive ODBC Client Interface, C:PSQLbinw3odbcci.dll). in C:inetpubwwwrootdefault.php:4 Stack trace: #0 C:inetpubwwwrootdefault.php(4): PDO->__construct() #1 {main} thrown in C:inetpubwwwrootdefault.php on line 4
DLL, которую он ищет, на самом деле находится в том месте, на которое он ссылается. насколько я могу судить, проблем с этим нет. ODBC правильно настроен на сервере, и я могу подключиться к БД в центре управления PSQL. может ли кто-нибудь помочь в определении моей проблемы или указать на строку подключения, которая работает либо с odbc_connect, либо с PDO?
Комментарии:
1. Ваш PHP 32 или 64-разрядный? Как насчет IIS? Как насчет PSQL? Обычно системная ошибка 1114 вызвана несоответствием 32/64 бит или проблемой пути. Убедитесь, что c:psqlbin каталог находится в системном пути.
Ответ №1:
Этот код работал для меня с использованием 64-разрядного ODBC PSQL v11, 64-разрядного PHP 7.2 на компьютере с Windows.
<?php
try {
// Connect to the data source
//$dbh = new PDO($dsn);
$dbh = new PDO("odbc:Driver={Pervasive ODBC Interface};ServerName=192.168.43.19;dbq=demodata");
$stmt = $dbh->prepare('SELECT * FROM class');
// Execute the prepared statement for each name in the array
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
$numResults = count($result);
echo ('<b>Total Results: </b> ' . $numResults . '<br>');
if ($numResults > 0) {
// Output the table header
echo '<table><tr>';
foreach ($result[0] as $fieldName=>$value) {
echo '<th>' . htmlspecialchars($fieldName) . '</th>';
}
echo '</tr>';
// Now output all the results
foreach($result as $row) {
echo '<tr>';
foreach ($row as $fieldName=>$value) {
echo '<td>' . htmlspecialchars($value) . '</td>';
}
echo '</tr>';
}
// Close the table
echo '</table>';
} else {
echo 'No results';
}
// Close statement and data base connection
$stmt = NULL;
$dbh = NULL;
}
catch(PDOException $e) {
echo $e->getMessage();
}
?>