2014-11-11 3 views
2

У меня есть простейшее веб-приложение с 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

выглядит как ошибка в моей базе данных внешней ключи ... Я разрешу это позже. Если вы знаете об ошибке прямо сейчас, тогда, пожалуйста, скажите мне ... спасибо Фреда.

+1

Похоже, вы слишком быстро закрываете соединение с БД. Поместите '$ stmt-> close();' после 'echo json_encode ($ response);' –

+0

@ Fred-ii- so, где я должен положить $ stmt-> close() ;? – xyz

+1

Перед закрывающим тегом '?>'. Также убедитесь, что все элементы формы имеют атрибут имени. Добавьте отчет об ошибках в начало файла (ов) сразу после открытия тега < 'error_reporting (E_ALL); ini_set ('display_errors', 1); 'посмотрите, не даст ли что-либо. –

ответ

3

В соответствии с желанием OP закрыть вопрос, увидев, что ошибка найдена.

Похоже, вы слишком быстро закрываете соединение с БД.

Место $stmt->close(); до вашего закрытия ?> бирка.

Кроме того, вместо целого блока if/else, включая $result = $stmt->execute();, замените его if(!$stmt->execute()){trigger_error("There was an error....".$con->error, E_USER_WARNING);}, чтобы увидеть реальную ошибку, почему она не работает.

Вы также должны заменить die("Database Connection Failed"); с
die('Connection failed [' . $con->connect_error . ']');
получить реальную ошибку в случае подключение должно когда-либо потерпеть неудачу.

Увидеть, что проблема связана с вашими внешними ключами.

Смежные вопросы