我正在尝试操作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()组合在一起(即不改变周围的内容)这条特殊的路线。)
答案 0 :(得分:4)
除了“你不应该这样做”之外,这里有你如何做到这一点:
$qs = mysql_query(...) or (header(...) xor die);
说明:xor
与or
类似,区别在于保证双方的表达式得到评估并且不会被短路。 (好的,xor
与or
不同,但为了这个答案并不重要。)
答案 1 :(得分: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());
}
答案 2 :(得分: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());
}
答案 3 :(得分:2)
你可以随时:
$qs = mysql_query("blah");
if (!$qs) {
//headers
header('Location: blah');
die('MySQL error: '.mysql_error());
}
答案 4 :(得分:0)
没有任何目的可以显示骰子消息,因为任何浏览器都会捕获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/');