php notice, sql and isset()


php notice, sql and isset()

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

使用@it工作$query .= " hash = '" . @$_GET['key'] . "'";

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

在if子句中:

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

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

感谢您的帮助

在这种情况下,您可以使用array_key_exists()。只有在那之后才检查值:

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

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

您应该永远不要在严肃的代码中使用@

@操作符只是告诉解释器关闭并忽略不会使系统崩溃的错误。它给出了一个不稳定的代码,不应该使用!

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

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

这意味着如果$_GET['key']已声明并具有值,则使用它,否则使用默认值(")。

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

上面,我使用了if ... else的简短版本。以下两种说法相同:

// Short version ( TEST ? if TRUE : else FALSE )
$query = isset($_GET['key']) ? $_GET['key'] : '';
// Long version
if ( isset( $_GET['key'] ) )
    $query = $_GET['key'];
else
    $query = '';

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

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