mysqli подготовил оператор - вложенная функция не выполняет - PullRequest
3 голосов
/ 28 февраля 2012

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

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

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

function fn_smth1 ($id){
    global $mysqli;
    $stmt = $mysqli->stmt_init();
    if ($stmt->prepare("SELECT code FROM at WHERE id = ?")){
        $stmt->bind_param("i",$id);
        $stmt->execute();
        $stmt->bind_result($code);
        if ($stmt->fetch()){
            $code_displ = $code; 
        }
    }
    $stmt->close;
    return $code_displ;
}


function fn_smth2($id){
    global $mysqli;
    $stmt = $mysqli->stmt_init();
    if ($stmt->prepare("SELECT idx, name FROM at WHERE id = ?")){
        $stmt->bind_param("i",$id);
        $stmt->execute();
        $stmt->bind_result($idx, $name);
        if ($stmt->fetch()){
            $code_displ = $name.' === '.fn_smth1($idx); 
        }
    }
    $stmt->close;
    return $code_displ;
}


echo fn_smth2(1);

// ожидается

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

// получил

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

1 Ответ

2 голосов
/ 28 февраля 2012

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

...