sql — функция php db2_exec не выполняет конкретные запросы DB2

Я пытаюсь запросить базу данных 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? В идеале я хотел бы просто иметь возможность выполнять те же запросы точно так же, как и из командной строки, и не сталкиваться с этими проблемами

1

Решение

Вы можете выполнить SQL-операторы DB2 с этим кодом PHP. То, что вы просите, это также запустить Команды DB2 CLP в вашем коде, что невозможно по определению.

Вы можете попытаться найти решения в руководстве по DB2 для некоторых задач, например, с помощью хранимой процедуры ADMIN_CMD. Для некоторых команд, таких как «LIST TABLES», существует обходной путь, напрямую запрашивающий Системный каталог DB2, например, таблица SYSCAT.TABLES.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector