【问题标题】:Checking if a variable exists in DB or if variable is set at all检查数据库中是否存在变量或是否设置了变量
【发布时间】:2013-11-03 08:29:26
【问题描述】:

好的,所以我希望这段代码 sn-p 检查数据库中是否存在变量 $_GET['p'],如果存在则使 $p = $_GET['p'],如果不存在如果存在则使 $p = '1',如果 $_GET['p'] 甚至没有在链接中设置,则只显示 id 为 0 的页面($p = '0';)。这是我的代码。仅在链接中设置变量时显示“未知页面”。

if (isset($_GET['p']))
{
    $getpage = $_GET['p'];
    $sql     = sprintf("SELECT * FROM pages WHERE id=%d LIMIT 1", $getpage);
    $result  = $con->query($sql);
    if ($result && $result->mum_rows > 0 ){ 
        // if page id exists in "pages" table, then make $p = $_GET['p'].
        $p = $getpage;
    }
    else
    { 
        // if "p" ID doesn't exist in DB, then show "unknown page" page with id of "1".
        $p = '1';
    }
}
else if (!isset ($_GET['p'])) 
{
    //if variable "p" isn't set in link then display homepage or page with ID of 0.
    $p = '0';
}

【问题讨论】:

  • 上面的代码有什么问题?它是否输出任何错误?
  • Little Bobby Tables 会爱你的。以下是如何让他远离bobby-tables.com/php.html
  • 它没有显示任何错误,但是当我输入常规页面 id 时,例如localhost/cms/example.php?p=2,它一直显示我在数据库中的“未知页面”。是的,存在一个 ID 为 2 的页面,所以我不知道为什么它只输出 ID 为 1 的未知页面。
  • 使用 Mysqli 启用异常抛出还会将错误记录到最高警告级别的文件并遵循错误日志。并且:使用具有您可以信任的名称的变量。分配给变量。不要一次做太多事情。测试隔离的代码块。
  • 您确定查询成功了吗?您需要从 MySQL 检查错误,并显示错误消息。

标签: php mysql sql


【解决方案1】:

正如我评论的那样,它只是关于代码格式和排列,这里有另一个建议,它在您进行故障排除时很有帮助,而且非常简单:

function has_page_row(Mysqli $db, $pageId) 
{
    $sql    = sprintf("SELECT * FROM pages WHERE id=%d LIMIT 1", $getpage);
    $result = $db->query($sql);
    return $result && $result->mum_rows > 0;
}


$hasGet = isset($_GET['p']);
$hasRow = $hasGet && has_page_row($con, $_GET['p']);

$p = '0';
if ($hasRow) {
    $p =  $_GET['p'];
} elseif ($hasGet) {
    $p = '1';
}

然后,您还可以通过更改新 has_page_row 函数中的代码轻松解决有关愚蠢 SQL 查询的问题,请参阅:

【讨论】:

    猜你喜欢
    • 2014-09-15
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    相关资源
    最近更新 更多