Я пытаюсь запросить базу данных DB2 с помощью сценария php.
if ($conn) {
$stmt = db2_prepare($conn, $sql);
if ($stmt) {
$success = db2_execute($stmt);
if (!$success) {
$result[]= "exec errormsg1: " .db2_stmt_errormsg($stmt);
echo implode(' ',$result);
$message = implode(' ',$result); ?>
<script>
window.alert(' <?php echo $message; ?>');
</script>
<?php
}
else
{
while ($row = db2_fetch_both($stmt))
{
if ($format == "human"){
$result[] = implode(" ", $row);
} else {
$result[] = implode(",", $row);
}
}
У меня проблемы с определенными запросами, выполняемыми с использованием db2_exec или db2_execute.
У меня были проблемы с кодом выше с запросами типа метаданных, хотя и нашел некоторые обходные пути, например, если мой sql был жестко закодирован в
$query = "describe table schemaID.tablename";
Мне нужно изменить его, заключив его в
$sql = "call SYSPROC.ADMIN_CMD('".$query."')";
так что пока это работает для функции описать, я почесал голову над тем, что делать с такими командами, как
list tables for schema schemaID
какие ошибки в
exec errormsg1: [IBM] [Драйвер CLI] [DB2 / AIX64] SQL0104N Неожиданный маркер «таблицы» был найден после «списка». Ожидаемые токены могут включать в себя: «JOIN». SQLSTATE = 42601
или же
get db cfg
какие ошибки в
exec errormsg1: [IBM] [Драйвер CLI] [DB2 / AIX64] SQL0104N Неожиданный токен «db» был найден после «GET». Ожидаемые токены могут включать в себя: «STMM». SQLSTATE = 42601
из сообщений об ошибках я вижу, что у него есть проблема с разделителями, но я не уверен точно, почему, поскольку я могу заставить другие запросы работать нормально.
Также, если я попытаюсь выполнить эти команды через командную строку, они оба будут работать без проблем.
Я что-то упускаю из-за того, как правильно запрашивать DB2 в php? В идеале я хотел бы просто иметь возможность выполнять те же запросы точно так же, как и из командной строки, и не сталкиваться с этими проблемами
Вы можете выполнить SQL-операторы DB2 с этим кодом PHP. То, что вы просите, это также запустить Команды DB2 CLP в вашем коде, что невозможно по определению.
Вы можете попытаться найти решения в руководстве по DB2 для некоторых задач, например, с помощью хранимой процедуры ADMIN_CMD. Для некоторых команд, таких как «LIST TABLES», существует обходной путь, напрямую запрашивающий Системный каталог DB2, например, таблица SYSCAT.TABLES.
Других решений пока нет …