7

MySQL エラーが発生するのではなく、特定の URL にリダイレクトされるように PHP スクリプトを操作しようとしています。だから私はこれから行った...

$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");

これは機能しますが、気になる点が 2 つあります。まず、デフォルトは 302 リダイレクトですが、私は 301 リダイレクトを好みます。次に、この行から die() を削除すると、リダイレクト後にスクリプトが適切に終了しないのではないかと心配しています。

さて、ここで少し宿題をしましたが、コードの 1 行で die() を header() の 2 つのインスタンスと組み合わせることができるかどうか (つまり、この特定の行の周りを変更せずに) を完全に理解することはできません。 )。

4

5 に答える 5

4

「これを行うべきではない」という注意事項に加えて、これを行う方法は次のとおりです。

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

説明:両側の式が評価され、短絡しないことが保証されているという違いがありますxoror(わかりました、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

ブラウザーは HTTP ステータス コードをキャッチし、ドキュメントの内容を無視してそれに応じて動作するため、die メッセージを表示する目的はありません。そこで、同じことを実行する 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 に答える