2017-12-05 17 views
2

ソリューション:insert slected data as Foreign key and SQLSTATE[23000]: Integrity constraint violation: 1048挿入選択したデータ

基本的に私はACCOUNT_INFOテーブルからpatient_infoテーブルに外部キーacc_idを挿入したいです。

データベースからデータを取得できました。今私はそれを別のテーブルに外部キーとして挿入したいと思います。私は次のコードを持っています:

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; 
} 
?> 

私はこのエラーを取得しています:私は

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

そして、あなたはこれに直面していますか? –

+0

私は選択した値を返すことができますが、残りのコードを追加すると、JSON.parse()の での 'SyntaxError:予期せぬトークン<予期しないトークン< – Voula16

+0

を取得します。javascriptエラーでPHPコードを投稿しています。関連するコードを質問に投稿してください。 – jeroen

答えて

0

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

私は、PHPファイルにバックリンクここでエラーを取得していますあなたのwhileループを削除してコードを改善し、代わりに次のようになることを確信しています:

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

JSON(印刷する前に$ dataのvar_dumpを試してみましたか?
JavaScriptでの単純な問題ではありませんか?あなたはあなたのJavaScriptの部分で取得するはずのデータを使用しようとしましたか?

それはあなたのXMLHttpRequest内のヘッダーを設定する問題であるかもしれない、とJavaScriptはとにかくJSONを気にし、あなたを与えるものではありません...

今明白な質問:私は見ることができない

  • データベースに接続します。あなたはつながっていますか?
  • IDを挿入しようとしていますが、MySQLは自動インクリメント値を挿入できますか? (のIntをacc_idされていない、その場合には?)
  • あなたは$ _REQUESTて値を送っている、あなたは$ _REQUESTを通じて何かを取得していることを確認している(ところで、$ _GETと$ _POSTを確認してください)

私は助けてくれるといいですか

+0

こんにちは!助けてくれてありがとう !私はあなたが示唆したように私のコードを改善しましたが、私はまだそれがエラーを取得してテストすることはできません。今、それは接続されています。はい、それは自動増分ですが、他のテーブルの値は完全に働きました。取得し、私は多分もっとよく使用している以外の外部キーを追加する方法はありますか? – Voula16

+0

このページの内容 [http:// localhost:10080/ionic/patients.php](http:// localhost:10080/ionic/patients.php) idが自動インクリメント値の場合は、INSERTアクションから削除してください – Zyigh

+0

多分私は覚えています私の質問で明確ではないac_idはaccount_infoテーブルの自動インクリメントです。私は2つのテーブル間のリンクとしてpatient_infoテーブルに外部キーとして挿入したい – Voula16

関連する問題