首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  PHP

请教一个 PHP 中 mysqli::query()返回值传递问题

  •  
  •   opiviqo · 129 天前 · 933 次点击
    这是一个创建于 129 天前的主题,其中的信息可能已经有所发展或是发生改变。
    请教大家一个 mysql 的问题:mysqli::query ()的返回值 传递问题 eg:
    function_0 () {
    ......
    $result = $mysqli_query(...);//返回一个查询结果; 这个结果需要怎么传递出去呢? 我是直接传递 的好像不行?
    $result->fetch_assoc(); //取查询结果中的数据
    return $result; //返回这个结果
    }

    我在别的函数中使用该$result:
    function_1 () {
    ......
    $result = $function_0(); //获得函数返回的查询结果
    $result->fetch_assoc(); //这里就无法获取到数据了。。。
    }
    第 1 条附言  ·  129 天前
    fun_0 {
    ......
    $query = $this->CheckData();
    $result = $mysql->query($query);
    if(!$result) {
    echo "Cannot run query.";
    exit;
    }
    $this->dbData = $result;
    $num = $result->num_rows;
    if ($num > 0) {
    for($i = 0; $i < $num; $i++) {
    $row = $result->fetch_assoc();
    echo "<p><strong>Usr room_num:";
    ...
    }
    }
    else {
    echo "NO data!";
    }
    ......
    return $result;
    }

    function_1($result) {
    $num = $result->num_rows;
    if ($num > 0) {
    for($i = 0; $i < $num; $i++) {
    $row = $result->fetch_assoc();
    echo "<p><strong>Usr room_num:";
    ...
    }
    }
    else {
    echo "Check no data!";
    }
    }

    调用:
    $a = fun_0();
    fun_1($a);

    结果:
    Usr room_num:A0

    num:1

    用户姓名:??

    Usr room_num:

    num:

    用户姓名:
    12 回复  |  直到 2019-06-10 14:53:45 +08:00
        1
    xubeiyan   129 天前 via Android   ♥ 1
    传进另一个函数请把它加到参数里,比如 function_1($result),function_1 和 function_0 作用域不同
        2
    opiviqo   129 天前
    @xubeiyan 感谢您的回复! 我觉得这里$result 没有作用域的问题吧。
    fun_1 中:
    $result = function_0(); 和您说的用参数传递,难道有区别?
        3
    liuxu   129 天前   ♥ 1
    $result = $function_0();

    $result = function_0();
        4
    opiviqo   129 天前
    @xubeiyan 这个只是我发帖打错字了 源码没这个问题 不好意思
        5
    haiyang416   129 天前   ♥ 1
    function_0 返回数组,然后你为什么还要对返回的数组做 fetch_assoc() 调用?
        6
    haiyang416   129 天前   ♥ 1
    变量名这么重复用不是好的习惯。
        7
    haiyang416   129 天前
    @haiyang416 好吧,我看错了。
        8
    haiyang416   129 天前
    @opiviqo 你应该直接返回包含结果的数组,而不是 `mysqli_result` 对象,如果你想复用这个对象,可以参考这个文档: https://www.php.net/manual/en/mysqli-result.data-seek.php
        9
    nowgoo   129 天前
    function_0 中已经 fetch 过一次,如果结果集只有 1 行的话,再次 fetch 肯定就没了。
        10
    msg7086   129 天前   ♥ 1
    刚想说点什么,结果发现楼上几位都说了。
    结果集是流式的,读一条少一条,第一个函数把数据读走了,第二个函数读的时候就没的剩了。
        11
    opiviqo   129 天前
    @haiyang416 谢谢 使用您推荐的方法搞定
        12
    opiviqo   129 天前
    @msg7086 是的 工作流程正如您所说
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1242 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 22ms · UTC 23:12 · PVG 07:12 · LAX 16:12 · JFK 19:12
    ♥ Do have faith in what you're doing.