Php 将数据从一个表检索到具有不同列的另一个表

Php 将数据从一个表检索到具有不同列的另一个表,php,mysql,sql,pdo,Php,Mysql,Sql,Pdo,试图从数据库中检索信息并将其输入到一个整体中。我已经读了很多,但找不到任何具体的问题 代码在我放置注释的地方停止,在这里停止回答您提出的问题 冒号(:)在SQL文本中用于标识准备语句中命名绑定参数的占位符。该冒号包含在SQL文本中,并在执行SQL语句时提供该占位符的值 “货币符号”标识一个PHP变量;在字符串上下文中,对变量求值,并将变量的值合并到SQL文本中 以下是对你所问问题的回答。但我认为这将回答你应该问的其他几个问题 如果我们不能保证变量的值不包含一些将被解释为SQL的字符,那么PHP

试图从数据库中检索信息并将其输入到一个整体中。我已经读了很多,但找不到任何具体的问题


  • 代码在我放置注释的地方停止,在这里停止回答您提出的问题

    冒号(
    )在SQL文本中用于标识准备语句中命名绑定参数的占位符。该冒号包含在SQL文本中,并在执行SQL语句时提供该占位符的值

    “货币符号”标识一个PHP变量;在字符串上下文中,对变量求值,并将变量的值合并到SQL文本中


    以下是对你所问问题的回答。但我认为这将回答你应该问的其他几个问题

    如果我们不能保证变量的值不包含一些将被解释为SQL的字符,那么PHP变量中包含的“不安全”值就是“SQL注入”漏洞的来源。这就是为什么mysql接口包含了
    mysql\u real\u escape\u string
    函数。这是一个“包装器”,它检查值,并正确地转义值,以便将它们视为值,而不是解释为SQL语法



    Q:1。代码停止在我放置注释的地方//>>>>停止在这里,这样就不会执行
    mysql\u查询($sql\u conf2)
    ?你怎么知道的?您可以发布php错误消息或mysql_error()的结果吗?此外,mysql_*已被弃用,请使用mysqli_*;您的查询对于sql注入来说是显而易见的抱歉,使用PDO语法和准备好的语句更新了代码。此外,没有错误消息。1。我知道,因为我添加了一个
    echo
    语句,发现它就停在那里了。我在下面添加了一个
    $result\u conf2=$sql\u conf2->execute()或die('Error update database:'.mysql\u Error()),但不显示。2.对不起,我无法想象你在说什么。你能进一步扩展吗?好啊谢谢3.好的。不需要单独处理每一行,先运行SELECT,然后为每一行运行单独的INSERT。通过运行一个
    INSERT。。。SELECT
    语句,SELECT返回的所有行都将被插入(如果它成功运行的话)。我现在看到(我错过了对您问题的编辑),您现在正在混合使用PDO和mysql函数。你不能那样做。用一个或另一个。(不确定为什么最初是使用mysql接口开发的,但所有这些都必须更改为使用PDO,包括获取连接。)这看起来像是一个非常熟悉的产品“我将使用mysql接口编写它,不必担心SQL注入,然后将其更改为PDO,稍后再处理SQL注入“好的。这是我的问题之一。我不知道该怎么做。。。是的,我同意。我希望我能一扫就完成,但我有点不知所措。从mysql接口转换到PDO接口是一件非常痛苦的事情,因为你不能在这里更改一些东西,在那里更改一些东西。这一切都必须改变,这就是为什么在关于mysql接口的新手问题上总是有那么多“用PDO而不是mysql来做”的评论。从PDO开始开发要比转换使用mysql接口开发的项目少得多。
     <?php
    
        include('db.php');
    
        // passkey that got from link
        $pk=$_GET['pk'];
        $t_awhole_conf="t_awhole";
    
        // Retrieve data from table where row that match this passkey
        $sql_conf1="SELECT * FROM $t_awhole_conf WHERE confirm_code ='$pk'";
        $result_conf=mysql_query($sql_conf1) or die ('Error updating database: '.mysql_error());
    
    
        // If successfully queried
        if($result_conf){
            // Count how many row has this passkey
            $count=mysql_num_rows($result_conf);
    
                // if found this passkey in our database, retrieve data from table "t_awhole"
                if($count==1){
    
                    $rows=mysql_fetch_array($result_conf);
                    $fN = $rows['fN']; // capitalizes the first letter (6-26-14)
                    $lN = $rows['lN']; // capitalizes the first letter (6-26-14)
                    $aI = $rows['aI'];
                    $eml = $rows['eml'];
                    $pss = $rows['pss'];
                    $pss2 = $rows['pss2'];
    
                    $a_whole_conf="a_whole";
    
                    // Insert data that retrieves from "t_awhole" into table "a_whole"
                    $sql_conf2= $conn->prepare("INSERT INTO $a_whole_conf(fN, lN, aI, eml, pss, admin) 
                                        VALUES ($fN, $lN, $aI, $eml, $pss, $admin)");
    
    
        //>>>>Stops here<<<<<
                    $result_conf2=$sql_conf2->execute() or die ('Error updating database: '.mysql_error());
                }
    
                // if not found passkey, display message "Wrong Confirmation code"
                else {
                    echo "Wrong Confirmation code";
                }
    
                // if successfully moved data from table"t_awhole" to table "a_whole" displays message "Your account has been activated" and don't forget to delete confirmation code from table "t_awhole"
                if($result_conf2){
    
                    echo "Your account has been activated";
    
                    // Delete information of this user from table "t_awholeb" that has this passkey
                    $sql_conf3="DELETE FROM $t_awhole_conf WHERE confirm_code = '$pk'";
                    $result_conf3=mysql_query($sql_conf3);
                }
            }
            ?>
    
    $sql = "INSERT INTO a_whole
                 (   fN  , lN,   aI,   eml,   pss, admin)
            SELECT t.fN, t.lN, t.aI, t.eml, t.pss, '' AS admin
              FROM t_awhole t
             WHERE t.confirm_code = '" . mysql_real_escape_string($pk) "'";
    
    $sql = "INSERT INTO a_whole
                 (   fN  , lN,   aI,   eml,   pss, admin)
            SELECT t.fN, t.lN, t.aI, t.eml, t.pss, '' AS admin
              FROM t_awhole t
             WHERE t.confirm_code = :pk";
    
    $sth = $dbh->prepare($sql);
    $sth->bindParam(':pk', $pk, PDO::PARAM_INT);
    $sth->execute();