Скорее всего, в этой строке:
$stmt = $pdo->query( $selectTables );
Проблема в том, что вы уже использовали $stmt
для представления своего исходного утверждения ($ stmt = $pdo->query( $dataset );
).И из-за того факта, что второе присваивание $stmt
происходит внутри цикла, в котором вы все еще пытаетесь перебрать исходное выражение, это вызывает логическую ошибку.Уничтожение переменной, пока вы все еще используете, гарантированно вызовет проблемы.
Все будет в порядке при первом запуске цикла, но как только цикл попытается запустить второй раз, $stmt
больше не представляет того, что изначально делал, и поэтому возникает логическая проблема.
Просто измените свой внутренний код, чтобы использовать другое имя переменной, например:
$stmt2 = $pdo->query( $selectTables );
while ( $tables = $stmt2->fetch( PDO::FETCH_ASSOC ) ){
print_r($tables);
}
, и это создастновый объект оператора и сохранить исходный объект, который все еще используется.Я полагаю, что это должно решить вашу проблему.
PS Как общее правило кодирования, повторное использование одного и того же имени переменной дважды для представления различных объектов во время блока не считается хорошей идеей.Хороший качественный обзор кода вероятно пометил бы это.Это усложняет понимание (и, таким образом, отладку, обслуживание и расширение) кода, а также может привести к такой случайной логической ошибке.Это особенно верно для языков, таких как PHP, которые имеют довольно слабые правила типизации и области видимости.