首页 > 解决方案 > 将一行数据从一个数据表导出到另一个

问题描述

下面的代码适用于我正在从事的项目。我的 PHP 代码有一些问题,需要帮助。

我的数据表上有一个名为“导出”的按钮。单击按钮时,我希望复制该行上的数据并将其移动到存档中。

<?php

    function val($data) {
        $data = trim($data);
        $data = stripslashes($data);
        $data = htmlspecialchars($data);
        return $data;
    }
    
    $servername = "localhost";
    $username = "username";
    $password = "password";
    $dbname = "databasename";
    
    $ticket_id = $_GET["ticket_id"];
    
    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    } 
    
    $sql = "SELECT * FROM activeticket WHERE ticket_id='$ticket_id' INSERT INTO `ticketarchive`(`name`, `account_num`, `department`, `ticket_desc`, `email`, `assigned`, `status`, `fibre_site`) VALUES ([name],[account_num],[department],[ticket_desc],[email],[assigned],[status],[fibre_site])";
    
    if ($conn->query($sql) === TRUE) {
        echo "New record created successfully. Record ID is: ";
    } else {
        echo "Error: " . $sql . "<br>" . $conn->error;
    }
    
    $conn->close();
?>

以下是这产生的错误:

错误:SELECT * FROM activeticket WHERE ticket_id='1' INSERT INTO archiveticket( name, account_num, department, ticket_desc, email, assigned, status, fibre_site) VALUES ([name],[account_num],[department],[ticket_desc],[email],[assigned],[ status],[fiber_site]) 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以获取在第 1 行的“INSERT INTO archiveticket( name, account_num, department, ticket_desc, `')附近使用的正确语法

标签: phpmysqlselectsql-insert

解决方案


这并不是您真正遇到的 PHP 问题,只是您似乎对 SQL 不熟悉。您要做的是将 SELECT 查询的结果插入表中。这根本不是这样做的方法。您正在寻找的是:

$sql = "INSERT INTO `ticketarchive`(
    `name`,
    `account_num`,
    `department`,
    `ticket_desc`,
    `email`,
    `assigned`,
    `status`,
    `fibre_site`
)
SELECT
    `name`,
    `account_num`,
    `department`,
    `ticket_desc`,
    `email`,
    `assigned`,
    `status`,
    `fibre_site`
FROM
    `activeticket`
WHERE
    `ticket_id` = $ticket_id"

如需更多信息,请阅读此处

我还建议您研究参数化查询以避免 SQL 注入。


推荐阅读