函数结果通知:未定义的偏移量:一个网站上为0,而另一个网站上没有

时间:2017-02-26 05:04:53

标签: php mysql

这很奇怪。我正在一个在我的电脑上使用WAMP的新网站上工作,我复制并粘贴了我从我工作过的另一个网站创建的数据库函数。

以下是该功能。在这个新站点上,只要数据库中没有任何匹配项,我就会收到错误(注意:未定义的偏移量:0)。但是,在另一个站点(外部托管)我从来没有得到那个错误(从来没有,我只是专门测试它以确保)。

显然,我可以将“return $ rows [0]”放在if语句中以防止这种情况发生。但是,如果我需要对旧网站进行一些更改,我想知道导致问题的原因是什么!我有点担心!

还有另一个不同之处。在新网站上,当$ order为NULL时,我收到一个错误,说$ s3未定义。同样,我可以通过在开头将$ s1和$ s2一起定义来轻松修复它。但是,它在我的其他网站上工作正常并且已经有很长一段时间了。到底是什么区别??

function get_row5($table, $field, $where1, $value1, $where2=NULL, $value2=NULL, $where3=NULL, $value3=NULL, $where4=NULL, $value4=NULL, $where5=NULL, $value5=NULL, $order=NULL) {
$rows = array();
global $conn;
connect();
$s1 = "SELECT $field FROM $table WHERE $where1" . '=' . "'$value1'";
$s2 = "";
if ($where2 != NULL) {
    if ($value2 == NULL) {
        $s2 = " and $where2 is NULL";
    } else {
        $s2 = " and $where2" . ' = ' . "'$value2'";
    }
}
if ($where3 != NULL) {
    if ($value3 == NULL) {
        $s2 .= " and $where3 is NULL";
    } else {
        $s2 .= " and $where3" . ' = ' . "'$value3'";
    }
}
if ($where4 != NULL) {
    if ($value4 == NULL) {
        $s2 .= " and $where4 is NULL";
    } else {
        $s2 .= " and $where4" . ' = ' . "'$value4'";
    }
}
if ($where5 != NULL) {
    if ($value5 == NULL) {
        $s2 .= " and $where5 is NULL";
    } else {
        $s2 .= " and $where5" . ' = ' . "'$value5'";
    }
}
if ($order != NULL) {
    $s3 = " ORDER BY $order LIMIT 1";
}
$sql = $s1 . $s2 . $s3;

$result = $conn->query($sql);

while ($row = $result->fetch_assoc()) {
  $rows[] = $row;
}
mysqli_free_result($result);
$conn->close();

return $rows[0];
}

1 个答案:

答案 0 :(得分:0)

您正在解决此错误,因为您无法使用以下代码

来解决查询中的行返回问题
function get_row5($table, $field, $where1, $value1, $where2=NULL, $value2=NULL, $where3=NULL, $value3=NULL, $where4=NULL, $value4=NULL, $where5=NULL, $value5=NULL, $order=NULL) {
$rows = array();
global $conn;
connect();
$s1 = "SELECT $field FROM $table WHERE $where1" . '=' . "'$value1'";
$s2 = "";
$s3 = "";
if ($where2 != NULL) {
    if ($value2 == NULL) {
        $s2 = " and $where2 is NULL";
    } else {
        $s2 = " and $where2" . ' = ' . "'$value2'";
    }
}
if ($where3 != NULL) {
    if ($value3 == NULL) {
        $s2 .= " and $where3 is NULL";
    } else {
        $s2 .= " and $where3" . ' = ' . "'$value3'";
    }
}
if ($where4 != NULL) {
    if ($value4 == NULL) {
        $s2 .= " and $where4 is NULL";
    } else {
        $s2 .= " and $where4" . ' = ' . "'$value4'";
    }
}
if ($where5 != NULL) {
    if ($value5 == NULL) {
        $s2 .= " and $where5 is NULL";
    } else {
        $s2 .= " and $where5" . ' = ' . "'$value5'";
    }
}
if ($order != NULL) {
    $s3 = " ORDER BY $order LIMIT 1";
}
$sql = $s1 . $s2 . $s3;

$result = $conn->query($sql);

while ($row = $result->fetch_assoc()) {
  $rows[] = $row;
}
mysqli_free_result($result);
$conn->close();
if(count($rows))
  return $rows[0];
else
  return $rows; //<---empty row
}