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

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

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

    我在别的函数中使用该$result:
    function_1 () {
    ......
    $result = $function_0(); //获得函数返回的查询结果
    $result->fetch_assoc(); //这里就无法获取到数据了。。。
    }
    第 1 条附言  ·  2019-06-10 14:38:08 +08:00
    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
    xubeiyan
        1
    xubeiyan  
       2019-06-10 14:12:31 +08:00 via Android   ❤️ 1
    传进另一个函数请把它加到参数里,比如 function_1($result),function_1 和 function_0 作用域不同
    opiviqo
        2
    opiviqo  
    OP
       2019-06-10 14:24:46 +08:00
    @xubeiyan 感谢您的回复! 我觉得这里$result 没有作用域的问题吧。
    fun_1 中:
    $result = function_0(); 和您说的用参数传递,难道有区别?
    liuxu
        3
    liuxu  
       2019-06-10 14:28:36 +08:00   ❤️ 1
    $result = $function_0();

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