【问题标题】:How To Use insert array's data into different rows using For Loop [closed]如何使用 For 循环将数组的数据插入不同的行 [关闭]
【发布时间】:2017-10-30 08:48:21
【问题描述】:

我正在使用 for 循环将数据插入数据库, 我将数据存储在数组中以插入表中(例如 - questionIdArray) 我在下面分享我的代码。这种方法是正确的还是我应该改进它。

$retriveDataForJSON= mysql_query($querytoGetUsageOfSelectStudents);
while ($row = mysql_fetch_array($retriveDataForJSON))
{
    $USER_ID= $row["USER_ID"];                          
    $SESSION_ID= $row["SESSION_ID"];
    $QUESTION_IDS = $row["QUESTION_IDS"];
    $questionIdArray=explode(',',$QUESTION_IDS);
    $RESPONSES= $row["RESPONSES"];
    $responseArray=explode('|',$RESPONSES);
    $RIGHT_OR_WRONG = $row["RIGHT_OR_WRONG"];
    $rightWrongArray=explode('|',$RIGHT_OR_WRONG);
    $TIME_PER_QUESTION = $row["TIME_PER_QUESTION"];
    $timePerQuestionArray=explode('|',$TIME_PER_QUESTION);
    $QUIZ_SIZE = $row["QUIZ_SIZE"];
    $CORRECT_ANSWERS = $row["CORRECT_ANSWERS"];
    $COURSE_ID= $row["COURSE_ID"];
    $TOPIC_NAME = $row["TOPIC_NAME"];
    $SUBTOPIC_IDS = $row["SUBTOPIC_IDS"];
    //$subtopicNameArray = getSubtopicNameArray(subtopicIds)
    //$topicNameArray = getTopicNameArray(subtopicIds)
    $START_TIME = $row["START_TIME"];
    $END_TIME = $row["END_TIME"];
    $TIME_TAKEN = $row["TIME_TAKEN"];   
 for($i=0;$i<sizeof($questionIdArray);$i++){

        //Insert Query To Temp Table
   $queryToInInsertInTable= "INSERT INTO `temp_assessment_data`(`Q_ID`, `RESPONCE`, `W/R/B`, `TIME_TAKEN`, `USER_ID`, `TOPIC`, `SUBTOPIC`, `CLASS`, `SCHOOL`, `BLOCK`, `DISTRICT`) VALUES
    ('$questionIdArray[$i]','$responseArray[$i]','$rightWrongArray[$i]','$timePerQuestionArray[$i]','$USER_ID','$className','$schoolName','$blockName','$District')";
}

【问题讨论】:

  • 请用值描述数组。和完整的代码。
  • 刚刚上传完整代码

标签: php mysql sql arrays database


【解决方案1】:

请检查定义所有变量的值

<?php
$retriveDataForJSON= mysql_query($querytoGetUsageOfSelectStudents);
while ($row = mysql_fetch_array($retriveDataForJSON))
{
    $USER_ID= $row["USER_ID"];                          
    $SESSION_ID= $row["SESSION_ID"];
    $QUESTION_IDS = $row["QUESTION_IDS"];
    $questionIdArray=explode(',',$QUESTION_IDS);
    $RESPONSES= $row["RESPONSES"];
    $responseArray=explode('|',$RESPONSES);
    $RIGHT_OR_WRONG = $row["RIGHT_OR_WRONG"];
    $rightWrongArray=explode('|',$RIGHT_OR_WRONG);
    $TIME_PER_QUESTION = $row["TIME_PER_QUESTION"];
    $timePerQuestionArray=explode('|',$TIME_PER_QUESTION);
    $QUIZ_SIZE = $row["QUIZ_SIZE"];
    $CORRECT_ANSWERS = $row["CORRECT_ANSWERS"];
    $COURSE_ID= $row["COURSE_ID"];
    $TOPIC_NAME = $row["TOPIC_NAME"];
    $SUBTOPIC_IDS = $row["SUBTOPIC_IDS"];
    //$subtopicNameArray = getSubtopicNameArray(subtopicIds)
    //$topicNameArray = getTopicNameArray(subtopicIds)
    $START_TIME = $row["START_TIME"];
    $END_TIME = $row["END_TIME"];
    $TIME_TAKEN = $row["TIME_TAKEN"];   
     for($i=0;$i<sizeof($questionIdArray);$i++){

            //Insert Query To Temp Table
         $queryToInInsertInTable = "insert into `temp_assessment_data` set 
                            `Q_ID`      = '".$questionIdArray[$i]."',
                            `RESPONCE`  = '".$responseArray[$i]."',
                            `W/R/B`     = '".$rightWrongArray[$i]."',
                            `TIME_TAKEN`= '".$timePerQuestionArray[$i]."',
                            `USER_ID`   = '".$USER_ID."',
                            `TOPIC`     = '".$TOPIC_NAME."',
                            `SUBTOPIC`  = '".$SUBTOPIC_IDS."',
                            `CLASS`     = '".$className."',
                            `SCHOOL`    = '".$schoolName."',
                            `BLOCK`     = '".$blockName."',
                            `DISTRICT`  = '".$District."
                            ";

        mysql_query($queryToInInsertInTable) or die(mysql_error());
    }
}
?>

【讨论】:

  • 谢谢...它正在使用这种简单的方法...
【解决方案2】:

您可以使用. 字符连接插入数组值,并将$queryToInInsertInTable 与自身连接:

for($i=0; $i < sizeof($questionIdArray); $i++){
    //Insert Query To Temp Table
    $queryToInInsertInTable .= "INSERT INTO `temp_assessment_data`(`Q_ID`, `RESPONCE`, `W/R/B`, `TIME_TAKEN`, `USER_ID`, `TOPIC`, `SUBTOPIC`, `CLASS`, `SCHOOL`, `BLOCK`, `DISTRICT`) VALUES 
    ('".$questionIdArray[$i]."','".$responseArray[$i]."','".$rightWrongArray[$i]."','".$timePerQuestionArray[$i]."','".$USER_ID."','".$className."','".$schoolName."','".$blockName."','".$District."')";
}

注意 SQL 注入,检查数组值,它们不能来自客户端(GET 或 POST 值),以防止 SQL 注入。改用 PDO mysql

【讨论】:

    【解决方案3】:

    您可以使用 .用于连接以插入数组值。

    for($i=0; $i < sizeof($questionArray); $i++){
    //Insert Query To Temp Table
    $queryToInsertInTable .= "INSERT INTO `temp_assessment_data`(`Q_ID`, `RESPONCE`, `W/R/B`, `TIME_TAKEN`, `USER_ID`, `TOPIC`, `SUBTOPIC`, `CLASS`, `SCHOOL`, `BLOCK`, `DISTRICT`) VALUES 
    ('".$questionIdArray[$i]."','".$responseArray[$i]."','".$rightWrongArray[$i]."','".$timePerQuestionArray[$i]."','".$USER_ID."','".$className."','".$schoolName."','".$blockName."','".$District."')";
    

    }

    【讨论】:

      【解决方案4】:

      试试这个

           for($i=0;$i<sizeof($questionIdArray);$i++){
      
          //Insert Query To Temp Table
          $queryToInInsertInTable= "INSERT INTO `temp_assessment_data`(`Q_ID`, 
          `RESPONCE`, `W/R/B`, `TIME_TAKEN`, `USER_ID`, `TOPIC`, `SUBTOPIC`, 
           `CLASS`, `SCHOOL`, `BLOCK`, `DISTRICT`) VALUES
      
      
      
         (\"".$questionIdArray[$i]."\",\"".$responseArray[$i]."\",
         \"".$rightWrongArray[$i]."\",\"".$timePerQuestionArray[$i]."\",
          \"".$USER_ID."\",\"".$className."\",\"".$schoolName."\",
          \"".$blockName."\",\"".$District."\")"; }
      

      那是因为你应该使用 \" 而不是 ',如果你使用 phpmyadmin,它可能会给你错误

      【讨论】:

      • phpmyadmin?为什么它会给出错误?并且 phpmyadmin 不是数据库
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-11
      • 2014-09-17
      • 2017-02-15
      • 2017-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多