SQL-запросы FileMaker через ODBC Table не возвращают результат

У меня есть эта серьезно странная проблема. У меня есть 4 таблицы в файле FileMaker 12: проблемы, статьи, FMBM, реклама. У меня есть 2 метода в моем классе результатов, один записывает серию последовательных идентификаторов в каждую из этих таблиц, другой запрашивает эти таблицы. Метод, который записывает серийный идентификатор, работает отлично. Метод, который запрашивает таблицы, работает для 3 из 4 таблиц (Статьи, FMBM, Объявления), но не возвращает результирующий набор для Проблем.

Я проверил разрешения, но так как это пользователь с правами администратора, у него есть полный доступ ко всем, и нет никаких ограничений таблицы или макета (опять же, это администратор). Как ни странно, я подумал, что, возможно, это запрос, но когда я запускаю «SELECT * FROM Issues» в моем ODBC Query Tool, он возвращает соответствующие результаты. Меня просто сбивает с толку, что метод setKeys () работает отлично, но метод ViewLY терпит неудачу только в Issues.

Модель:

class Application_Model_Results {

public $keys;
public $odbc;
public $comp = array('Issues', 'Articles', 'Ads', 'FMBM');
public $existing = array();

function setKeys() {
$this->odbc = 'Migrator';
$obj = new Application_Model_Utilities();
$obj->name = $this->odbc;
$config = $obj->getElements();
$conn = odbc_connect($this->odbc, $config['user'], $config['password']);
if (!$conn) {
exit("Connection failed: -> " . $this->odbc);
}
foreach ($this->comp as $c) {
$sql = "SELECT Serial_ID FROM " . $c;
$rs = odbc_exec($conn, $sql);
if (!$rs) {
exit("Error in SQL");
}
while (odbc_fetch_row($rs)) {
$this->existing[] = odbc_result($rs, 'Serial_ID');
}
if (in_array(true, $this->keys[$c])) {
foreach ($this->keys[$c] as $v) {
if (!in_array($v, $this->existing)) {
$iSql = "INSERT INTO " . $c . "(Serial_ID) VALUES('$v')";
odbc_exec($conn, $iSql);
$obj->output = 'Inserted Serial_ID: ' . $v . ' into table ' . $c;
$obj->logger();
}
}
}
}
}

public function getResults($table) {
$this->odbc = 'Migrator';
$obj = new Application_Model_Utilities();
$obj->name = $this->odbc;
$config = $obj->getElements();
$conn = odbc_connect($this->odbc, $config['user'], $config['password']);
if (!$conn) {
exit("Connection failed: -> " . $this->odbc);
}
$sql = "SELECT * FROM " . $table;
$rs = odbc_exec($conn, $sql);
while (odbc_fetch_row($rs)) {
$results[odbc_result($rs, 'Serial_ID')] = odbc_fetch_array($rs);
}
return $results;
}

}

Контроллер:

public function viewAction()
{
$results = new Application_Model_Results();
$result = $results->getResults('Issues');
$page = $this->_getParam('page', 1);
$paginator = Zend_Paginator::factory($result);
$paginator->setItemCountPerPage(1);
$paginator->setCurrentPageNumber($page);
$this->view->paginator = $paginator;
}

Примечание: если вы удалите код просмотра и просто напишите:

<?php

$conn = odbc_connect('Migrator', 'admin', '********');
$sql = "SELECT * FROM Issues";
$rs = odbc_exec($conn, $sql);
while(odbc_fetch_row($rs)){
print_r(odbc_result_all($rs));
}

Я не получаю строк, возвращаемых.

РЕДАКТИРОВАТЬ:

Виновник был найден:

while (odbc_fetch_row($rs)) {
$results[odbc_result($rs, 'Serial_ID')] = odbc_fetch_array($rs);
}

Сейчас я работаю над решением, которое захватывает каждую строку результатов и помещает ее в ассоциативный массив. Проблема в том, что мне нужно выгружать все, а не использовать odbc_result ($ rs,) для каждого поля.

0

Решение

Наконец мой кошмар закончился:

public function getResults($table) {
$obj = new Application_Model_Utilities();
$obj->name = $this->odbc;
$config = $obj->getElements();
$conn = odbc_connect($this->odbc, $config['user'], $config['password']);
if (!$conn) {
exit("Connection failed: -> " . $this->odbc);
}
$sql = "SELECT * FROM " . $table;
$obj->output = 'Running query: ' . $sql;
$obj->logger();
$rs = odbc_exec($conn, $sql);
$obj->output = 'Results found: ' . odbc_num_rows($rs);
$obj->logger();
$results = array();
$i = 1;
while(odbc_fetch_row($rs)){
$results[] = odbc_fetch_array($rs, $i);
$i++;
}return $results;
}

Это возвращает ассоциативный массив, который я на самом деле могу пройти через.

ПРИМЕЧАНИЕ: в этом случае любое использование odbc_fetch_array, odbc_fetch_object, odbc_fetch_into, если я не заставлю odbc_fetch_array иметь значение строки, будет только пересматривать каждый другой результат, а не все результаты, и затем умрет на представлении, если я специально не вызвал поле значение, и даже тогда, одно и то же значение сохранялось во всех постраничных записях.

1

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

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

По вопросам рекламы [email protected]