如何使用PHP在MySQL中插入嵌套数组
我有一个数组,表示我的应用程序创建的测验。在这里,我有一个嵌套数组中的问题标题、问题类型和答案 以下是该阵列的一个示例:如何使用PHP在MySQL中插入嵌套数组,php,mysql,sql,arrays,Php,Mysql,Sql,Arrays,我有一个数组,表示我的应用程序创建的测验。在这里,我有一个嵌套数组中的问题标题、问题类型和答案 以下是该阵列的一个示例: Array ( [0] => stdClass Object ( [options] => Array ( [0] => stdClass Object (
Array
(
[0] => stdClass Object
(
[options] => Array
(
[0] => stdClass Object
(
[valid] =>
[content] => Answer 1
)
[1] => stdClass Object
(
[valid] =>
[content] => Answer 2
)
[2] => stdClass Object
(
[valid] =>
[content] => Answer 3
)
)
[content] => Question 1
[type] => radios
)
[1] => stdClass Object
(
[options] => Array
(
[0] => stdClass Object
(
[valid] =>
[content] => Answer 1
)
[1] => stdClass Object
(
[valid] =>
[content] => Answer 2
)
[2] => stdClass Object
(
[valid] =>
[content] => Answer 3
)
)
[content] => Question 2
[type] => radios
)
)
现在,我的代码如下所示:
$name = $_POST['name'];
$test = json_decode($_POST['test']);
$con=mysqli_connect("Localhost","root","","test");
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
这包括到数据库的连接。在做研究时,我发现了一个问题。它涵盖了插入过程的基本原则,但我在尝试实施解决方案时遇到了一个问题: 我有两张桌子。问题表和选项表。“我的数据”中的嵌套数组“选项”需要插入到选项表中,并且每个位置都引用了主要问题。在将“内容”和“类型”字段插入问题表时,我如何做到这一点 编辑:我试过这个代码,但它目前不起作用。我怎样才能适应它
$sql = "INSERT INTO question (content, type) values ";
$valuesArr = array();
foreach($test as $row){
$content = mysql_real_escape_string( $row['content'] );
$type = mysql_real_escape_string( $row['type'] );
$valuesArr[] = "('$content', '$type')";
}
$sql .= implode(',', $valuesArr);
编辑:我的表格结构:
问题
- ID(主键)
- 内容
- 类型
- ID(主键)
- 问题编号(FK)
- 内容
ID(PK)
ID(PK)
内容
问题ID(FK)
类型
内容
我将整个数组作为$questions
(您在问题中粘贴的对象)
您的问题和选项表结构?,您想将选项表中的ID存储到相应的问题?@boom_Shiva我想通过ID将选项引用到其问题。如果有更好的方法,请告诉我。已编辑的问题。您是否正在存储选项的有效字段的值,即对象中的值?我已更新answer@boom_Shiva现在不需要它。在我学会如何存储后,我会在时机成熟时存储它。因此,根据您对答案中字段的要求进行修改,主要逻辑将是相同的。
foreach( $questions as $question ){
$options = $question->options;
$options_id = array();
$question_query = "INSERT INTO questions (Content, Type) VALUES ({$question->content}, {$question->type})";
if( !mysqli_query($con, $question_query) ){ echo "Query failed"; return; }
$question_id= mysqli_insert_id();
foreach($options as $option){
$options_query = "INSERT INTO options (Question_ID, Content, Valid) VALUES ({$question_id}, {$option->content}, {$option->valid})";
if( mysqli_query($con, $options_query) ){
$options_id[] = mysqli_insert_id();
}
}
if($options_id){
//Do something or store options and question id
var_dump($options_id); //just to check
}
}