7

我正在尝试操作一个 PHP 脚本,以便它重定向到一个特定的 URL,而不是给我一个 MySQL 错误。所以我从这个...

$qs = mysql_query("SELECT url FROM $table WHERE `id` = $gid;") or die('MySQL error: '.mysql_error());

...对此:

$qs = mysql_query("SELECT url FROM $table WHERE `id` = $gid;") or header("Location: http://www.example.com");

哪个有效,但有两件事让我担心。首先,它默认为 302 重定向,我更喜欢 301 重定向。其次,我担心通过从该行中删除 die() ,重定向后脚本无法正确退出。

现在,我在这里做了一些功课,但我不太清楚是否可以在单行代码中将 die() 与 header() 的两个实例结合起来(即不改变这一特定行周围的内容) )。

4

5 回答 5

4

除了“你不应该这样做”的说明之外,你可以这样做:

$qs = mysql_query(...) or (header(...) xor die);

解释:xor就像or不同之处在于保证两边的表达式都被评估并且没有短路。(好的,xor与 不同or,但对于这个答案的目的,这并不重要。)

于 2011-06-04T21:22:26.803 回答
3

你可以使用一个if块:

$qs = mysql_query("SELECT url FROM $table WHERE `id` = $gid;");
if (!$qs) {
    header("Location: http://www.example.com");
    die('MySQL error: '.mysql_error());
}
于 2011-06-04T21:17:50.357 回答
3
$query_string = '';
$location = '';

$qr = mysql_query($query_string);
if (!$qr) {
  header ('HTTP/1.1 301 Moved Permanently');
  header ('Location: '.$location);
  die('MySQL error: '.mysql_error());
}
于 2011-06-04T21:21:07.413 回答
2

你总是可以:

$qs = mysql_query("blah");
if (!$qs) {
   //headers
   header('Location: blah');
   die('MySQL error: '.mysql_error());
}
于 2011-06-04T21:17:56.940 回答
0

显示 die 消息是没有意义的,因为任何浏览器都会捕获 HTTP 状态代码并采取相应的行动,而忽略文档的内容。在那里你应该使用 exit() 命令,它做同样的事情减去将任何内容回显到缓冲区。

您可能正在使用此回退操作,那么为什么不将其设为常见的回退功能:

function fallback($location='/default/path/to/somewhere') {
    header('HTTP/1.1 301 Moved Permanently');
    header('Location: '.$location);
    exit();
}

$query = mysql_query('...') or fallback('/path/to/somewhere/');
于 2011-06-04T21:27:56.927 回答