データベース接続が別のファイル (config.php) にある場合、PDO 準備済みステートメントはリダイレクトを停止します。クエリは正しく機能し (つまり、適切に挿入されるなど)、リダイレクトは、データベース接続が別のファイルではなくドキュメントにある場合は正常に機能しますが、db 接続が別のファイルに移動すると機能しなくなります。エラーメッセージはスローされません。
同様の質問で言及された他の問題 (エラー メッセージと URL パス) を除外するため。また、エラー メッセージを削除し (ドキュメントに何も出力されないようにするため)、相対パスを完全な URL に置き換えてみました。エラー報告がオンの場合、示されているように try/catch ブロックにラップされます。
更新 -
以下のコードは機能しますが、それを置き換える$conn = new PDO...
とrequire_once('config.php');
リダイレクトされなくなります (エラー メッセージが設定されているかどうかに関係なく)。また、問題を引き起こす可能性のある余分なスペースと、最後の ?> も削除しました。
また、catch ステートメントの前後にリダイレクトを設定しようとしました (try/catch ブロックを削除するだけでなく)。
<?php
session_start();
$conn = new PDO('mysql:host=localhost;dbname=click2fit', 'db_username', 'DB_Password');
try {
$stmt = $conn->prepare('INSERT INTO customer_info (user_id, fname, lname)
VALUES(:user_id, :fname, :lname)');
$stmt->bindParam(':user_id', $user_id);
$stmt->bindParam(':fname', $_POST['fname'], PDO::PARAM_STR);
$stmt->bindParam(':lname', $_POST['lname'], PDO::PARAM_STR);
$stmt->execute();
header("location: page2.html");
exit();
} catch(PDOException $e) {
echo 'Error: ' . $e->getMessage();
}
config.php:
<?php
$conn = new PDO('mysql:host=localhost;dbname=click2fit', 'db_username', 'DB_Password');
?>
エラー報告を有効にした config.php:
<?php
$salt = "XXXXXXXXXXXXXXXXXXX";
try {
$conn = new PDO('mysql:host=localhost;dbname=click2fit', 'db_username', 'DB_Password');
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}