Вставить выбранные данные в базу данных

Решение: вставьте выбранные данные в качестве внешнего ключа и SQLSTATE [23000]: нарушение ограничения целостности: 1048

В принципе, я хочу вставить таблицу acc_id Foreign в таблице patient_info из таблицы account_info.

Мне удалось получить данные из моей базы данных. Теперь я хочу вставить его в другую таблицу как внешний ключ. У меня есть следующий код:

try { $stmt = $pdo->query('SELECT acc_id FROM account_info ORDER BY acc_id DESC LIMIT 1'); while($row = $stmt->fetch(PDO::FETCH_OBJ)) { // Assign each row of data to associative array $data[] = $row; } // Return data as JSON echo json_encode($data); } 

Как вставить значение в таблицу? это полный код:

 <?php header('Access-Control-Allow-Origin: *'); // Define database connection parameters $hn = 'localhost'; $un = 'root'; $pwd = ''; $db = 'ringabell'; $cs = 'utf8'; // Set up the PDO parameters $dsn = "mysql:host=" . $hn . ";port=3306;dbname=" . $db . ";charset=" . $cs; $opt = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ, PDO::ATTR_EMULATE_PREPARES => false, ); // Create a PDO instance (connect to the database) $pdo = new PDO($dsn, $un, $pwd, $opt); // Retrieve specific parameter from supplied URL $key = strip_tags($_REQUEST['key']); $data = array(); switch($key) { // Add a new record to the technologies table case "create": // Sanitise URL supplied value $acc_id = filter_var($_REQUEST['acc_id'], FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW); $p_fname = filter_var($_REQUEST['p_fname'], FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW); $p_lname = filter_var($_REQUEST['p_lname'], FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW); $p_gender = filter_var($_REQUEST['p_gender'], FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW); $p_condition = filter_var($_REQUEST['p_condition'], FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW); $p_emergencycontact = filter_var($_REQUEST['p_emergencycontact'], FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW); $p_birthdate = filter_var($_REQUEST['p_birthdate'], FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW); try{ $stmt = $pdo->query('SELECT acc_id FROM account_info ORDER BY acc_id DESC LIMIT 1'); while($row = $stmt->fetch(PDO::FETCH_OBJ)) { // Assign each row of data to associative array $data[] = $row; } // Return data as JSON echo json_encode($data); $sql= "INSERT INTO patient_info(acc_id, p_fname, p_lname, p_gender, p_condition, p_birthdate, p_emergencycontact) VALUES(:acc_id, :p_fname, :p_lname, :p_gender, :p_condition, :p_birthdate, :p_emergencycontact)"; $stmt = $pdo->prepare($sql); $stmt->bindParam(':p_fname', $p_fname, PDO::PARAM_STR); $stmt->bindParam(':p_lname', $p_lname, PDO::PARAM_STR); $stmt->bindParam(':p_gender', $p_gender, PDO::PARAM_STR); $stmt->bindParam(':p_condition', $p_condition, PDO::PARAM_STR); $stmt->bindParam(':p_birthdate', $p_birthdate, PDO::PARAM_STR); $stmt->bindParam(':p_emergencycontact', $p_emergencycontact, PDO::PARAM_STR); $stmt->bindParam(':acc_id', $acc_id, PDO::PARAM_STR); $stmt->execute(); echo json_encode(array('message' => 'Congratulations the record was added to the database')); } // Catch any errors in running the prepared statement catch(PDOException $e) { echo $e->getMessage(); } break; } ?> 

Я получаю эту ошибку:

 ERROR SyntaxError: Unexpected token < in JSON at position 0 at JSON.parse (<anonymous>) 

Я получаю здесь ошибку, которая ссылается на файл php:

 load() { this.http.get('http://localhost:10080/ionic/patients.php') .map(res => res.json()) .subscribe(data => { this.items = data; }); } 

Я уверен, что вы могли бы улучшить свой код, удалив цикл while и вместо этого подойдите:

 $data = $stmt->fetchAll(PDO::FETCH_OBJ); 

Вы уверены, что ожидаете JSON (попробовал любой var_dump из $ data перед его печатью?)?
Разве это не простая проблема с JavaScript? Вы пытались использовать данные, которые вы должны получить в своей части JavaScript?

Возможно, проблема в настройке заголовков внутри вашего XMLHttpRequest, и JavaScript не заботит и не дает вам JSON в любом случае …

Теперь очевидные вопросы:

  • Я не вижу, где вы подключаетесь к своей базе данных. Ты подключен ?
  • Вы пытаетесь вставить идентификатор, делает ли MySQL значение INSERT auto increment? (в этом случае это не acc_id Int?)
  • Вы отправляете значения через $ _REQUEST, вы уверены, что получаете что-либо через $ _REQUEST (кстати, проверьте $ _GET и $ _POST)

Я надеюсь, что это помогает