Операторы, подготовленные PDO, останавливают перенаправление, когда соединение с базой данных находится в отдельном файле (config.php). Запрос работает правильно (т. Е. Правильно вставляет и т. Д.), А перенаправление работает очень хорошо, когда соединение с базой данных находится в документе, а не в отдельном файле, но оно перестает работать, когда соединение db перемещается в другой файл. Это не вызывает сообщений об ошибках.Оператор, подготовленный PDO, останавливает перенаправление, если соединение db находится в файле конфигурации
Чтобы исключить другие проблемы, упомянутые в похожих вопросах (сообщения об ошибках и путь к URL). Я также удалил сообщения об ошибках (так что это определенно ничего не печатало в документе) и попытался заменить относительный путь полным URL-адресом. Когда отчет об ошибках включен, он завернут в блок try/catch, как показано.
ОБНОВЛЕНИЕ - ниже код работает, но если я заменю $conn = new PDO...
с require_once('config.php');
он больше не переадресовывает (независимо от того, или нет сообщений об ошибках Создаются). Я также удалил лишние пробелы, которые могут вызвать проблемы, а также закрытие?>.
Я также попытался имея перенаправлять до и после того, как заявление на вылов (а также удаления/поймать блок TRY)
<?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');
?>
конфигурации. 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();
}
Какое перенаправление? Пожалуйста, разместите соответствующий код, который сломан. Я предполагаю, что отдельный файл include содержит errant whitespace, который разбивает вызов 'header()'. Возможно, даже простая дополнительная строка после закрытия '?>' –
Я использовал PHP + PDO с несколькими различными СУБД (MySQL и PostgreSQL), и у меня всегда есть соединение с базой данных в отдельном файле include. Я не знаю об этой проблеме. – jap1968
Включить отчет об ошибках 'error_reporting (E_ALL); ini_set ('display_errors', 1); 'и искать материал, связанный с [этой проблемой] (http://stackoverflow.com/questions/8028957/headers-already-sent-by-php) –