【问题标题】:Insert Selected data in database在数据库中插入选定的数据
【发布时间】:2018-05-18 21:40:58
【问题描述】:

基本上我想从 account_info 表中插入一个外键 acc_id 到 patient_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;
  });
}

解决方案:insert slected data as Foreign key and SQLSTATE[23000]: Integrity constraint violation: 1048

【问题讨论】:

  • 你在做这件事时到底遇到了什么问题?
  • 我可以返回选择的值,但是当我添加其余代码时,我得到SyntaxError: Unexpected token &lt; in JSON at position 0 at JSON.parse (&lt;anonymous&gt;)
  • 您正在发布带有 javascript 错误的 php 代码。将相关代码发布到问题中。
  • 不确定,但请尝试在 fetch 中使用 `PDO::FETCH_ASSOC` 而不是 PDO::FETCH_OBJ
  • @NigelRen 我仍然遇到同样的错误!

标签: php mysql angular typescript ionic-framework


【解决方案1】:

我很确定你可以通过删除你的 while 循环来改进你的代码,而不是像这样:

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

您确定收到的是预期的 JSON(在打印之前尝试了 $data 的任何 var_dump 吗?)?
这不只是 JavaScript 的一个简单问题吗?您是否尝试过使用应该在 JavaScript 部分中获取的数据?

这可能是在你的 XMLHttpRequest 中设置标头的问题,而 JavaScript 并不关心并给你 JSON...

现在很明显的问题:

  • 我看不到您连接到数据库的位置。您连接了吗?
  • 您正在尝试插入 ID,MySQL 是否允许您插入自动递增值? (在这种情况下, acc_id 不是 Int 吗?)
  • 您正在通过 $_REQUEST 发送值,您确定您正在通过 $_REQUEST 获得任何东西(顺便说一句,检查 $_GET 和 $_POST)

希望对你有帮助

【讨论】:

  • 您好!感谢你们对我的帮助 !我按照您的建议改进了我的代码,但是我无法测试它仍然出现错误。现在,它已连接。是的,它是自动递增的,另一个表中的值工作得很好。除了我正在使用的外键之外,有没有办法检索和添加外键??
  • 这个页面有什么? http://localhost:10080/ionic/patients.php 如果 id 是自动递增值,请将其从 INSERT 操作中删除
  • 也许我不清楚我的问题 ac_id 是 account_info 表中的自动增量。我想将它插入到 patient_info 表中,作为两个表之间的链接作为外键
  • 哦,对不起,我的错...您切换的 $key 是什么?你确定是满的?如果插入了行,您是否查看过数据库?你在 $_REQUEST 中有什么?
  • 在 $key 中,我可以选择创建更新或删除。正确填写了帐户信息表。 Request 中没有任何内容,但没有它,代码将无法工作
猜你喜欢
  • 2021-07-15
  • 2020-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 2016-11-22
  • 2016-10-21
相关资源
最近更新 更多