Php 在数据库中插入所选数据

Php 在数据库中插入所选数据,php,mysql,angular,typescript,ionic-framework,Php,Mysql,Angular,Typescript,Ionic Framework,基本上,我想在account\u info表的patient\u info表中插入一个外键acc\u 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))

基本上,我想在account\u info表的patient\u info表中插入一个外键acc\u 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;
}
?>


解决方案:

我敢肯定,您可以通过删除while循环来改进代码,改为如下方式:

$data = $stmt->fetchAll(PDO::FETCH_OBJ);
您确定得到了预期的JSON(在打印之前尝试过任何$data的var_转储吗?
这不是JavaScript的一个简单问题吗?您是否尝试过使用JavaScript部分中应该获得的数据

这可能是在XMLHttpRequest中设置头的问题,JavaScript并不关心,并且不管怎样都会给您JSON

现在有一些明显的问题:

  • 我看不到您连接到数据库的位置。你有联系吗
  • 您试图插入一个ID,MySQL允许您插入自动增值吗?(在这种情况下,acc_id不是Int吗?)
  • 您正在通过$\u请求发送值,您确定通过$\u请求获得了任何信息吗(顺便说一句,检查$\u GET和$\u POST)

我希望这会有所帮助

,你在做这件事时面临的具体问题是什么?我可以返回所选的值,但是当我添加其余的代码时,我在JSON.parse()的位置0处得到
SyntaxError:Unexpected token<在JSON中,你正在发布带有javascript错误的php代码。将相关代码张贴到问题上。不确定,但尝试使用'PDO::FETCH_ASSOC',而不是在您的FETCH中使用
PDO::FETCH_OBJ
。@NigelRen我仍然会遇到相同的错误!你好谢谢你帮助我!我按照你的建议改进了我的代码,但是我无法测试它,仍然会出错。现在,它已连接。是的,它是自动递增的,另一个表中的值工作得很好。有没有一种方法可以检索和添加一个外键,而不是我正在使用的外键?这个页面中有什么?如果id是一个自动增量值,请将其从插入操作中删除。也许我的问题不太清楚,帐户信息表中的ac_id是自动增量。我想将它作为外键插入到patient_info表中,作为两个表之间的链接哦,对不起,我的错误。。。您切换的$key是什么?你确定里面有人吗?如果插入了行,您是否查看了数据库?在$u请求中有什么?在$key中我有创建更新或删除的选项。帐户信息表填写正确。请求中没有任何内容,但如果没有它,代码将无法工作
load()
{
  this.http.get('http://localhost:10080/ionic/patients.php')
  .map(res => res.json())
  .subscribe(data =>
  {
     this.items = data;
  });
}
$data = $stmt->fetchAll(PDO::FETCH_OBJ);