mysqli预编译语句 - 嵌套函数不执行

时间:2012-02-27 22:30:53

标签: php mysqli prepared-statement nested-function

fetch内部的嵌套函数(在另一个函数内部)不执行。

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 个答案:

答案 0 :(得分:2)

您正在尝试执行第二个预准备语句,而第一个语句的结果集尚未存储。在尝试执行第二个语句之前使用mysqli_stmt::store_result()