当前位置: 首页 > 知识库问答 >
问题:

PHP将数组保存到SQL问题

皇甫才良
2023-03-14

我反复使用表单和保存页面将用户的答案保存到我的sql数据库中。最初,我将答案保存到一个数组中,一旦达到目标,我使用一个循环将数组的所有值传递到数据库,更新页面的代码如下所示:

unset($_SESSION['myanswers']);

$_SESSION['myanswers'] = array();
        $_SESSION['myanswers']=array(
        "File"=>$_POST['file'],
        "Rating"=>$_POST['like'],
        "Repetitions"=>$_SESSION['reps'],
        "degradation"=>$_POST['degradation']
    );  


$f1=$_SESSION['myanswers']['File'];
$r1=$_SESSION['myanswers']['Rating'];
$r2=$_SESSION['myanswers']['Repetitions'];
$the_id=$_SESSION['user_id'];
$the_deg=$_SESSION['myanswers']['degradation'];


array_push($_SESSION['answers'], $_SESSION['myanswers']);
if($_SESSION['counter']==goal){

require 'connect.php';

foreach( $_SESSION['answers'] as $key => $obj)
{



    $f1=$obj['File'];
    $r1=$obj['Rating'];
    $r2=$obj['Repetitions'];
    $the_id=$_SESSION['user_id'];
    $the_deg=$obj['degradation'];

    $sql = "INSERT INTO `array`(`id`, `file`, `rating`, `repetitions`, `degredation`) VALUES ('$the_id', '$f1', '$r1', '$r2', '$the_deg')";
    mysql_query($sql);



}

header("Location: MyEndPage");
die();
}else{
    header("Location: MyFormPage");
    die();
}

这段代码运行得很好,但我需要立即保存所有答案,而不是在达到目标时保存。因此,我将代码更改为以下内容:

unset($_SESSION['myanswers']);

$_SESSION['myanswers'] = array();
        $_SESSION['myanswers']=array(
        "File"=>$_POST['file'],
        "Rating"=>$_POST['like'],
        "Repetitions"=>$_SESSION['reps'],
        "degradation"=>$_POST['degradation']
    );  


$f1=$_SESSION['myanswers']['File'];
$r1=$_SESSION['myanswers']['Rating'];
$r2=$_SESSION['myanswers']['Repetitions'];
$the_id=$_SESSION['user_id'];
$the_deg=$_SESSION['myanswers']['degradation'];


require 'connect.php';
$sql = "INSERT INTO `array`(`id`, `file`, `rating`, `repetitions`, `degredation`) VALUES ('$the_id', '$f1', '$r1', '$r2', '$the_deg')";
mysql_query($sql);





if($_SESSION['counter']==goal){
    header("Location: MyEndPage");
die();
}else{
    header("Location: MyFormPage");
    die();
}

当问题出现时,新条目总是保存在新旧数据之间的同一位置。例如,如果在更改之前我保存了5个条目,它们在sql数组中的顺序如下:

1,name1,data1
2,name2,data2
3,name3,data3
4,name4,data4
5,name5,data5

使用新代码重复添加新条目是有问题的,例如,如果我们添加条目6,7,8,它们是这样添加的:

1,name1,data1 | 1,name1,data1 | 1,name1,data1
2,name2,data2,name2,data2
3,name3,data3,data3,name3,data3
4,name4,data4,name4,data4
5,name5,data6,data5,data6,data6,data6
4,name7,数据8
-------------------6,名称6,数据6,名称7,数据5
--------------6,名称6,数据6

出于某种原因,插入不位于sql数组的末尾,而是堆栈在旧代码收集的数据的末尾。我尝试了一些代码上的调整,但没有成功。

共有1个答案

艾照
2023-03-14

数据库不一定在表的末尾存储新记录。它们还可以重用先前删除释放的空间。

此外,无论出于何种原因,顺序可能看起来是随机的。特别是当您筛选(where子句)或联接其他表时,顺序可能会受到影响,因为MySQL使用特定的索引进行筛选或联接,并且通常会按该顺序返回实际数据。

不管是什么原因,如果你查询数据,你可能会以任何随机顺序得到这些数据。如果需要特定顺序中的信息,请通过向查询添加ORDER BY子句来强制执行该顺序。

 类似资料:
  • 问题内容: 什么是将数据数组保存到单个mysql字段的好方法? 同样,一旦我在mysql表中查询该数组,又有什么好方法可以将其恢复为数组形式? 是序列化和反序列化答案吗? 问题答案: 没有 好的 方法可以将数组存储到单个字段中。 您需要检查您的关系数据并对模式进行适当的更改。请参阅下面的示例以获取对此方法的参考。 如果 必须 将数组保存到单个字段中,则and 函数可以解决问题。但是您不能对实际内容

  • 问题内容: $ sql =“ INSENT INTO data(id,num,name)VALUES ”; 如何将$ array转换成? 谢谢 问题答案: implode()可以帮助您做到这一点,尽管您将需要遍历并将其应用于每个单独的数组:

  • 问题内容: 我想将多维字节数组保存到SQL Server数据库。 我知道如何保存一个字节数组,这是图像到数据库的转换。为此,我使用的数据类型是。但是现在我想存储另一个字节数组,它是多维字节数组,它具有带有x,y值的二维。 我在互联网上搜索过,在这里,据说是使用格式。我只想知道是否将多维数组保存在数据类型数据列中,这些值会被更改吗?是否可以再次将数据接收为多维数组? 问题答案: 是的,您将能够不更改

  • 问题内容: 我想以自己的格式将SQL保存到YAML文件,如下所示: 我使用以下YAML设置 但是我得到了YAML的“经典”丑陋输出 有什么办法可以实现输出#1? PS。repr(config)等于: 问题答案: 如果您的输入格式是一些未格式化的SQL(没有换行符和缩进空格),就像您似乎从输出(2)中 获取的那样,您将 永远不会 自动获得良好的输出: 会给你: 如您所知。您可以尝试使用换行符和缩进来

  • 问题内容: 我想将日期和时间从PHP保存到SQL。这是插入新记录的SQL语句(在类的方法中找到): 在.php页面中,我使用来调用当前日期和时间。但是我仍然收到错误“日期时间值不正确”。我可以用来获取日期吗? 问题答案: 一定是确切的请求时间吗?您可以使生活更轻松,只需使用: MySQL将在您的输入写入表后立即插入当前日期。

  • 问题内容: 我正在尝试对与php数组中的值匹配的行进行sql查询。 本质上我有一个像 并希望执行单个SQL查询以获取与该数组匹配的行 是否有捷径可寻?还是我必须手动构造查询字符串? 问题答案: 使用爆破功能,即