У меня есть простейшее веб-приложение с back end в PHP. Я пробовал три часа, но не смог решить проблему.Подготовленный оператор не выполнил
Мой код выглядит следующим образом:
1. db_connect.php
<?php
define("HOST", '127.0.0.1');
define("USER", 'root');
define("PASSWORD", '');
define("DB", 'tourist guide');
$con = new mysqli(HOST,USER,PASSWORD,DB);
if ($con->connect_errno){
die("Database Connection Failed");
exit();
}
2. index.php
<?php
require_once 'db_connect.php';
$response = array();
$result = "";
if (isset($_POST['firstname']) && isset($_POST['lastname']) && isset($_POST['email'])&& isset($_POST['password'])) {
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$email = $_POST['email'];
$password = $_POST['password'];
$stmt = $con->prepare("INSERT INTO
user_accounts
(first_name,last_name,email,password)
VALUES
(?,?,?,?)");
echo 'prepared statement executed. ';
$stmt->bind_param('ssss', $firstname, $lastname, $email, $password);
echo 'values given. ';
$result = $stmt->execute();
echo 'statement is executed. ';
$stmt->close();
}
if ($result) {
$response["success"] = 1;
$response["message"] = "account successfully created.";
echo json_encode($response);
} else {
$response["success"] = 0;
$response["message"] = "An error occurred during registration.";
echo json_encode($response);
}
>
И? вывод следующий s:
prepared statement executed. values given. statement is executed. {"success":0,"message":"An error occurred during registration."}
Только ошибка должна быть $result = $stmt->execute();
. Я здесь не прав? или ошибка - это что-то еще? PLZ помощь.
UPDATE:
Из комментария Фреда я добавил:
if(!$stmt->execute()){trigger_error("there was an error....".$con->error, E_USER_WARNING);}
Теперь он реальная ошибка показывает:
Cannot add or update a child row: a foreign key constraint fails
выглядит как ошибка в моей базе данных внешней ключи ... Я разрешу это позже. Если вы знаете об ошибке прямо сейчас, тогда, пожалуйста, скажите мне ... спасибо Фреда.
Похоже, вы слишком быстро закрываете соединение с БД. Поместите '$ stmt-> close();' после 'echo json_encode ($ response);' –
@ Fred-ii- so, где я должен положить $ stmt-> close() ;? – xyz
Перед закрывающим тегом '?>'. Также убедитесь, что все элементы формы имеют атрибут имени. Добавьте отчет об ошибках в начало файла (ов) сразу после открытия тега < 'error_reporting (E_ALL); ini_set ('display_errors', 1); 'посмотрите, не даст ли что-либо. –