php通知,sql和isset()

时间:2015-12-02 09:15:34

标签: php sql notice

如何摆脱apache / php消息"注意:未定义的索引"在SQL查询字符串中:

使用@它有效$query .= " hash = '" . @$_GET['key'] . "'";

但是使用isset()它并不是: $query .= " hash = '" . !isset($_GET['key']) . "'";

和if子句:

使用@它有效 if (@$_GET['action'] === "de") {

但是使用isset()它并不是: if (!isset($_GET['action']) === "de") {

感谢您的帮助

3 个答案:

答案 0 :(得分:2)

在这种情况下,您可以使用array_key_exists()。然后才检查价值:

if (array_key_exists('action',$_GET) && $_GET['action'] === "de") {
...
}

这样,如果第一个失败,那么第二个永远不会被检查,你将不会收到通知。

你应该在严肃的代码中不要使用@

答案 1 :(得分:0)

您应该尝试修复代码,而不是试图避免它。在尝试使用它之前,您应该始终检查一个值。即

if(!isset($_GET['key'])&&!empty($_GET['key'])){
    return 'action isnt set!';
};

答案 2 :(得分:0)

@运算符只是告诉解释器关闭并忽略不会导致系统崩溃的错误。它提供了一个不稳定的代码,不应该使用!

函数isset返回truefalse。您可以使用它来检查变量是否已声明且具有值。这就是你应该如何使用它:

$query .= "hash = '" . ( isset($_GET['key']) ? $_GET['key'] : '' ) . "'";

这意味着如果声明了$_GET['key'],则使用if ... else,否则使用默认值('')。

如果没有提供任何内容,有时代码可以使用默认值运行。这是isset()的一种用法。

上面,我使用了// Short version ( TEST ? if TRUE : else FALSE ) $query = isset($_GET['key']) ? $_GET['key'] : ''; // Long version if ( isset( $_GET['key'] ) ) $query = $_GET['key']; else $query = ''; 的简短版本。以下两个陈述是相同的:

<table id="example" class="table table-bordered table-striped" cellspacing="0" width="100%">