MYSQLI多查询功能

Posted

技术标签:

【中文标题】MYSQLI多查询功能【英文标题】:MYSQLI multi query function 【发布时间】:2020-02-03 11:46:02 【问题描述】:

我想创建一个函数来自动连接到数据库并执行给定的查询,但我无法让它工作并且它没有给出错误。 我认为我没有以正确的方式输出,我的目标是输出一个存储查询返回的所有值的数组。

这是我目前的代码,希望你能帮到你:

public function db_query() 
    $ini = parse_ini_file($_SERVER['DOCUMENT_ROOT'] . '/app.ini');
    $mysqli = new mysqli($ini['db_location'], $ini['db_user'], $ini['db_password'], $ini['db_name']);

    // create string of queries separated by ;
    $query = "SELECT name FROM mailbox;";
    $query .= "SELECT port FROM mailbox";

    // execute query - $result is false if the first query failed
    $result = mysqli_multi_query($mysqli, $query);

    if ($result) 
        do 
            // grab the result of the next query
            if (($result = mysqli_store_result($mysqli, 0)) === false && mysqli_error($mysqli) != '') 
                echo "Query failed: " . mysqli_error($mysqli);
                while ($row = $result->fetch_row()) 
                    echo $row[0];
                
            
         while (mysqli_more_results($mysqli) && mysqli_next_result($mysqli)); // while there are more results
     else 
        echo "First query failed..." . mysqli_error($mysqli);
    

注意:我没有为查询添加参数只是为了测试 目的。

【问题讨论】:

SELECT name, port FROM mailbox 够了 我在一张表中添加了多个查询来测试功能 在您的do 循环中,您只会在 store_result 操作失败的情况下回显任何内容。如果成功,则不会回显任何内容。 【参考方案1】:
public function db_query($mysqli) 

    $return = [];
    $result = mysqli_query($mysqli, "SELECT name FROM mailbox");
    while ($row = $result->fetch_row()) 
        $return[] = $row[0];
    
    $result = mysqli_query($mysqli, "SELECT port FROM mailbox");
    while ($row = $result->fetch_row()) 
        $return[] =  $row[0];
    
    return $return;

简单、干净、高效、始终有效

【讨论】:

另外,在进入while循环之前检查$result。 不,您永远不应该手动检查结果。配置mysqli改为报告错误 这应该只有一个查询。为什么要执行两次? @Dharman 因为它是only for test

以上是关于MYSQLI多查询功能的主要内容,如果未能解决你的问题,请参考以下文章

mysqli多行插入,简单多插入查询

Mysqli多行插入,简单的多插入查询

MySQLi 连接无法建立,正常的 MySQL 功能工作吗?

单击清除按钮后使用多查询功能修改表

如何制作mysqli连接功能?

Mysqli查询功能插入重复行