首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查MySQL查询是否返回任何内容时遇到问题

问检查MySQL查询是否返回任何内容时遇到问题
EN

Stack Overflow用户
提问于 2016-10-12 17:24:29
回答 2查看 87关注 0票数 0

这就是我在做的事。

  1. 我正在检查$get_version的URL中是否有"version“值。
  2. 从数据库中获取最新版本并设置为默认变量。
  3. 如果URL变量是好的,请检查数据库是否存在,然后设置适当的变量。
  4. 如果不存在,请使用上面的默认值。

它总是会转到“坏查询”部分。要么我的查询是错误的,要么我的if语句不工作。

这是我的密码。还有,有更干净的方法吗?

代码语言:javascript
复制
// Check if there's a version in URL. If not, set to empty.
$get_version = isset($_GET['version']) ? $_GET['version'] : '';


    // Set defaults if nothing in URL
    $query = "SELECT * FROM sn_hockey_versions ORDER BY version_id DESC LIMIT 1";
    mysqli_query($db, $query) or die('Error querying database.');
    $result = mysqli_query($db, $query);

    while ($row = mysqli_fetch_array($result)) {
        $newest_version_id = $row['version_id'];
        $newest_sections = $row['sections'];
    }

    if (!empty($get_version) && preg_match('/^[0-9.]*$/', $get_version)) { 

      $query = "SELECT version_id, sections FROM sn_hockey_versions WHERE version = '".$get_version."'";
      mysqli_query($db, $query) or die('Error querying database.');
      $result = mysqli_query($db, $query);


      if ($row = mysqli_fetch_array($result)) {

          $set_version = $row['version_id'];
          $v_sections = $row['sections'];
          $test = "IT WORKS!!!!";

      }
      else {
          $set_version = $newest_version_id;
          $v_sections = $newest_sections;
          $test = "Bad query";
      }
    }
    else {
      $set_version = $newest_version_id;
      $v_sections = $newest_sections;
      $test = "Set default";
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-12 18:00:24

您的条件if语句正在检查是否将$rows设置为mysql_fetch_array($result),而不是它是否返回任何结果。如果查询返回结果,条件语句返回true,则将$row设置为结果数组,并且您的If块将被计算。否则,$row设置为null,使条件为false,而set块将计算结果。

因为您的else语句是计算的,所以我认为查询存在问题,可以通过打印数组的结果来进行测试。虽然有许多方法可以检查查询是否返回任何结果,但为了避免代码中的混淆,在获取结果之前检查mysql_num_rows的值将是一个更好的解决方案:

代码语言:javascript
复制
  if (mysqli_num_rows($result) > 0) {
      $row = mysqli_fetch_array($result)

有关mysqli_num_rows的更多信息,请查看http://php.net/manual/en/mysqli-result.num-rows.php

另见:query() returned any results?

提高代码效率的另一个建议是:只在必要时查询数据库的默认版本。太多不必要的查询会导致数据库性能问题。实现这一目标的一种方法是将默认版本查询放入函数中,并仅在"bad query“"set default”块中调用它。我希望这能帮到你。

票数 0
EN

Stack Overflow用户

发布于 2016-10-12 17:53:43

若要在代码之外检查查询是否成功,请复制查询并在phpmyadmin或ssh中运行该查询,以查看它是否返回结果。如果它返回结果,那么在您的代码中添加一些停止检查,以查看您得到了什么。就像这样

代码语言:javascript
复制
 echo '<pre>jwow',print_r($result,1),'</pre>';
 die('here');

只要把你想检查的结果放在下面就行了。我喜欢用不同的名字命名查询结果。比如$defaults_results和$version_results。如果是“坏的查询”,您将发现您的错误后,尝试。如果它在phpmyadmin中没有返回任何结果,那么读取它给出的错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40004742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档