2014-03-27 3 views
0

У меня есть код последующие:Вложенные запросы PDO не выполняются?

$sql = $pdo->query("SELECT pageid FROM webpages WHERE ISNULL(deleted) ORDER BY sortindex"); 
while ($row = $sql->fetch(PDO::FETCH_ASSOC)) { 
    switch ($row["pageid"]) { 
    case "information": 
    Write(" <li class='top'><a href='index.php?m=info' id='info' class='top_link'><span class='down'>Information</span></a>"); 
    Write(" <ul class='sub'>"); 
    Write("  <li><a href='index.php?m=info&submode=n'>News</a></li>"); 
    Write("  <li><a href='index.php?m=info&submode=e'>Events</a></li>"); 
    Write("  <li><a href='index.php?m=info&submode=m'>Minutes</a></li>"); 
    $subsql = $pdo->query("SELECT * FROM categories WHERE visible = 1 ORDER BY sortindex,category"); 
    while ($catrow = $subsql->fetch(PDO::FETCH_ASSOC)) Write("  <li><a href='index.php?m=info&cat={$catrow["cid"]}'>{$catrow["category"]}</a></li>"); 
    Write(" </ul>"); 
    break; 
    } 
} 

Когда я запускаю его, я получаю «Фатальная ошибка: Вызов функции-члена выборки() на не-объект в/корневым/дома/веб/HTML/тест .php в строке 29 "строка 29 является линией« while ($ catrow ... »)

На моем dev-сервере, хотя это работает. Что я должен проверять, чтобы выяснить, как заставить его работать над производством сервер? Я понятия не имею, почему это произойдет. Если я переведу код из первого цикла SQL, он отлично работает при производстве. Это не работает:

$sql = $pdo->query("SELECT pageid FROM webpages WHERE ISNULL(deleted) ORDER BY sortindex"); 
while ($row = $sql->fetch(PDO::FETCH_ASSOC)) { 
    switch ($row["pageid"]) { 
    case "information": 
    Write(" <li class='top'><a href='index.php?m=info' id='info' class='top_link'><span class='down'>Information</span></a>"); 
    Write(" <ul class='sub'>"); 
    Write("  <li><a href='index.php?m=info&submode=n'>News</a></li>"); 
    Write("  <li><a href='index.php?m=info&submode=e'>Events</a></li>"); 
    Write("  <li><a href='index.php?m=info&submode=m'>Minutes</a></li>"); 
    Write(" </ul>"); 
    break; 
    } 
} 
$subsql = $pdo->query("SELECT * FROM categories WHERE visible = 1 ORDER BY sortindex,category"); 
while ($catrow = $subsql->fetch(PDO::FETCH_ASSOC)) Write("Cat: {$catrow["category"]}<br/>"); 

Когда я запустил это, первый цикл запускается, после чего я получаю список категорий в порядке. Я знаю, что не могу выполнить Stack Overflow для устранения неполадок с моим сервером, но если у кого-то есть представление о том, какая настройка или какая-либо другая проблема вызвала бы такое поведение, я бы очень признателен за любые советы :)

+0

Что такое 'ISNULL (deleted)'? –

+0

deleted - это поле datetime в MySQL, чтобы сообщить мне дату/время, когда человек, помеченный как удаленный. Мне не нравится удалять вещи, я просто отмечаю их как таковые и скрываю. Вид «корзины», я полагаю. Если я копирую запрос в phpMyAdmin и выполняю его там, я получаю результаты в порядке. – Ken

+0

Мне интересно, что делает функция Write(). Не могу представить, какой код он может состоять. –

ответ

0

Заявления, которые не полностью выбраны, могут блокироваться другие утверждения, чтобы фактически произойти (следовательно, $subsql не является действительным объектом PDO). это может сработать:

$rows = $pdo->query("SELECT pageid FROM webpages WHERE ISNULL(deleted) ORDER BY sortindex")->fetchAll(PDO::FETCH_ASSOC); 
foreach ($rows as $row) { 
    switch ($row["pageid"]) { 
    case "information": 
    Write(" <li class='top'><a href='index.php?m=info' id='info' class='top_link'><span class='down'>Information</span></a>"); 
    Write(" <ul class='sub'>"); 
    Write("  <li><a href='index.php?m=info&submode=n'>News</a></li>"); 
    Write("  <li><a href='index.php?m=info&submode=e'>Events</a></li>"); 
    Write("  <li><a href='index.php?m=info&submode=m'>Minutes</a></li>"); 
    $subsql = $pdo->query("SELECT * FROM categories WHERE visible = 1 ORDER BY sortindex,category"); 
    while ($catrow = $subsql->fetch(PDO::FETCH_ASSOC)) Write("  <li><a href='index.php?m=info&cat={$catrow["cid"]}'>{$catrow["category"]}</a></li>"); 
    Write(" </ul>"); 
    break; 
    } 
} 
+0

Спасибо! В этом была проблема, ваша модификация отлично работает на моем prod-сервере. Интересно, почему он работает на моем Dev. Мой dev работает под старым PHP, может быть, это то, что они исправили/изменили в более поздней версии? Ну, в любом случае, спасибо! – Ken

+0

hmmm, может быть, на вашем сервере dev есть только одна строка, возвращаемая первым оператором? это может помочь вам: http://php.net/manual/en/mysqlinfo.concepts.buffering.php –

+0

Нет, база данных одинакова между этими двумя. Я прочту документы, спасибо. – Ken

Смежные вопросы