mysqli подготовил оператор - вложенная функция не выполняет

Вложенная функция внутри fetch (которая находится внутри другой функции) не выполняет.

fn_smth1 вложен в fn_smth2 и должен выводить результат через fn_smth2

Пример ниже представляет собой упрощенную версию.

function fn_smth1 ($ id) {
    global $ mysqli;
    $ stmt = $ mysqli-> stmt_init ();
    if ($ stmt-> prepare ("ВЫБЕРИТЕ код ОТ ГДЕ id =?")) {
        $ Stmt->bind_param("я",$ ID);
        $ Stmt-> Execute ();
        $ Stmt-> bind_result ($ код);
        if ($ stmt-> fetch ()) {
            $ code_displ = $ code; 
        }
    }
    $ Stmt-> близко;
    вернуть $ code_displ;
}


function fn_smth2 ($ id) {
    global $ mysqli;
    $ stmt = $ mysqli-> stmt_init ();
    if ($ stmt-> prepare ("ВЫБЕРИТЕ idx, имя FROM в WHERE id =?")){
        $ Stmt->bind_param("я",$ ID);
        $ Stmt-> Execute ();
        $ stmt-> bind_result ($ idx, $name);
        if ($stmt->fetch()){
            $code_displ = $name.' === '.fn_smth1($idx); 
        }
    }
    $ Stmt-> близко;
    вернуть $ code_displ;
}


echo fn_smth2 (1);

// ожидается

какое-то имя здесь === какой-то код здесь

//получено

какое-то имя здесь === null (функция fn_smth1 не дает значения)

1 ответ

Решение

Вы пытаетесь выполнить второй подготовленный оператор, а набор результатов из первого еще не был сохранен. использование mysqli_stmt::store_result() прежде чем пытаться выполнить второе утверждение.

Другие вопросы по тегам