У меня есть этот класс подключения, где я подключаюсь к нескольким базам данных. Мне нужно адаптироваться так, чтобы база данных Informix выполняла запрос только для чтения. Игнорирование того, заблокирована ли таблица.
Сообщение, возвращаемое с таблицей блокировки, следующее:
Неустранимая ошибка: Uncaught PDOException: SQLSTATE [HY000]: Общая ошибка: -246 [Informix ] [Informix ODB C Driver] [Informix] Не удалось выполнить индексированное чтение для получения следующей строки. sqlerrm (получить строку по идентификатору строки)
В этом отрывке я установил параметр set isolation to dirty read;
, но он не работал.
$conn = new PDO("informix:host={$host}; service={$port}; database={$name}; server={$server}; protocol=onsoctcp; set isolation to dirty read;EnableScrollableCursors=1", $user, $pass);
Ниже всего класса:
<?php
class connection {
public static $conn;
private static $last;
public static function open($basename) {
if (file_exists("config/{$basename}.ini")) {
$db = parse_ini_file("config/{$basename}.ini");
} else {
throw new exception("Error connect '$basename'");
}
$user = isset($db['user']) ? $db['user'] : NULL;
$pass = isset($db['pass']) ? $db['pass'] : NULL;
$name = isset($db['name']) ? $db['name'] : NULL;
$host = isset($db['host']) ? $db['host'] : NULL;
$type = isset($db['type']) ? $db['type'] : NULL;
$port = isset($db['port']) ? $db['port'] : NULL;
switch ($type) {
case 'pgsql':
$port = $port ? $port : '5432';
$conn = new PDO("pgsql:dbname={$name}; user={$user}; password={$pass};host=$host;port={$port};");
break;
case 'mysql':
$port = $port ? $port : '3306';
$conn = new PDO("mysql:host={$host};port={$port};dbname={$name}", $user, $pass);
break;
case 'sqlite':
$conn = new PDO("sqlite:{$name}");
break;
case 'ibase':
$conn = new PDO("firebird:dbname={$name}", $user, $pass);
break;
case 'oci8':
$conn = new PDO("oci:dbname={$name}", $user, $pass);
break;
case 'mssql':
$conn = new PDO("mssql:host={$host},1433;dbname={$name}", $user, $pass);
break;
case 'informix':
$port = $port ? $port : '1528';
$server = 'ol_standard';
$conn = new PDO("informix:host={$host}; service={$port}; database={$name}; server={$server}; protocol=onsoctcp; set isolation to dirty read;EnableScrollableCursors=1", $user, $pass);
break;
}
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
self::$conn[$basename] = $conn;
self::$last = $basename;
}
public static function select($sql, $base = null) {
if (!$base)
$base = self::$last;
return self::$conn[$base]->query($sql);
}
public static function exec($sql, $ret_id = false, $base = null) {
if (!$base)
$base = self::$last;
$retorno = self::$conn[$base]->exec($sql);
if ($ret_id)
$retorno = self::$conn[$base]->lastInsertId();
return $retorno;
}
public static function close($base = null) {
if (!$base)
$base = self::$last;
self::$conn[$base] = null;
}
}