php - 多次mysql查询导致返回null

标签 php mysql

当使用两个 mysql 查询执行 PHP 函数时,第二个返回 null,这是不应该的,因为它们都在 phpmyadmin SQL 查询提交中工作。

函数如下:

  public static function getStates($countryId) {
     try {
       $query    = "SELECT * FROM `Apostas` WHERE `idConfronto` = ".$countryId;
       $result = dbconfig::run($query);
       if(!$result) {
         throw new exception("Confronto invalido.");
       }
       $res = array();
       while($resultSet = mysqli_fetch_assoc($result)) {
        $sql2   = "SELECT * FROM `Mercados` WHERE `idMercado` = ".$resultSet["idMercado"];
        $result2 = dbconfig::run($sql2);
        if(!$result2) {
            throw new exception("Não há mercados.");
        }
        while ($row2 = mysqli_fetch_assoc($result2)) {
            $res[$resultSet['idMercado']] = $row2['nomeMercado'];
        }
       }
       $data = array('status'=>'success', 'tp'=>1, 'msg'=>"States fetched successfully.", 'result'=>$res);
     } catch (Exception $e) {
       $data = array('status'=>'error', 'tp'=>0, 'msg'=>$e->getMessage());
     } finally {
        return $data;
     }
   }

第一个查询每次都有效,但第二个查询会出现异常“Não há mercados”。

调试函数后,变量 $resultSet["idMercado"] 正常,sql 查询也正常,但代码导致异常。

我做错了什么?也许有什么语法?

--编辑1: 根据要求,dbconfig::run 的代码:

  public static function run($query) {
    try {
      if(empty($query) && !isset($query)) {
        throw new exception("Query string is not set.");
      }
      $result = mysqli_query(self::$con, $query);
      self::close();
     return $result;
    } catch (Exception $e) {
      echo "Error: ".$e->getMessage();
    }

  } 

——编辑 2: 正如 Cavid 所建议的那样,在关闭连接之前执行所有查询,这是函数的结果:

public static function getStates($countryId) {
     try {
       $query    = "SELECT * FROM `Apostas` WHERE `idConfronto` = ".$countryId;
       $result = $conn->query($query);
       if(!$result) {
         throw new exception("Confronto invalido.");
       }
       $res = array();
       if ($result->num_rows > 0) {
        while ($resultSet = $result->fetch_assoc()) {
            $sql2   = "SELECT * FROM `Mercados` WHERE `idMercado` = ".$resultSet['idMercado'];
            $result2 = $conn->query($sql2);
            if ($result2->num_rows > 0) {
                while ($row2 = $result2->fetch_assoc()) {
                    $res[$resultSet['idMercado']] = $row2['nomeMercado'];
                }
            }
           }
       }
       $data = array('status'=>'success', 'tp'=>1, 'msg'=>"States fetched successfully.", 'result'=>$res);
     } catch (Exception $e) {
       $data = array('status'=>'error', 'tp'=>0, 'msg'=>$e->getMessage());
     } finally {
        return $data;
     }
     $conn->close();
   }

它现在给我一个错误代码 500“内部服务器错误”

最佳答案

我建议您加入它们并且只使用一个 while 循环,而不是进入两个都有引用 ID 的不同表:

public static function getStates($countryId) {
    try {
        // Inner join both tables
        $query    = "SELECT a.idMercado, a.idConfronto, b.nomeMercado FROM Apostas AS a ";
        $query    .= "INNER JOIN ";
        $query    .= "Mercados AS b ";
        $query    .= "ON a.idMercado = b.idMercado ";
        $query    .= "WHERE a.idConfronto = " . $countryId;
        $result = dbconfig::run($query);
        if(!$result) {
            throw new exception("Confronto invalido.");
        }
        // Results
        $res = array();
        while ($row = mysqli_fetch_assoc($result)) {
            $res[$row['idMercado']] = $row['nomeMercado'];
        }
        $data = array('status'=>'success', 'tp'=>1, 'msg'=>"States fetched successfully.", 'result'=>$res);
    } catch (Exception $e) {
        $data = array('status'=>'error', 'tp'=>0, 'msg'=>$e->getMessage());
    } finally {
        return $data;
    }
}

关于php - 多次mysql查询导致返回null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47721285/

相关文章:

php - file_exists() 什么时候发出 E_WARNING?

php - 使 PHP 网站面向对象和 MVC 的正确方法是什么?

javascript - 文件上传目的地

python - 使用 python 3.4 的 MySQL 更新查询示例

mysql - SQL,计算多个模块出现的天数

php - MYSQL 关联计数

php - 在codeigniter中组合2个sql查询

mysql - 如何计算 SQL 查询的选择谓词的否定?

mysql - 选择行位置和整行

在 Windows 10 上找不到 PHP 5.6.8 JsonSerialized 接口(interface)