【问题标题】:How to store an array in a database column如何将数组存储在数据库列中
【发布时间】:2014-07-22 20:19:05
【问题描述】:

我一直在尝试将数组存储在数据库列中,但尚未成功。

我已经研究 php 和 sql 两个星期了,我没有编程背景。所以请原谅我的无知。我敢肯定我犯了很多错误。

让我进一步解释一下我的情况。

我创建了一个网页,以便管理员可以填写有关某些游戏的一些数据。这是在登录过程之后。 当管理员到达这一点时,我现在不会为“正确”输入而烦恼。我只想获取数据库中的数据。

我用 mysql 创建了一个名为games 的表,并用我目前拥有的数据填充它:

+--------+--------+-----+-----+------+------+------+
|game_id |round_id|team1|team2|score1|score2|result| 
+--------+--------+-----+-----+------+------+------+
| 1      | 1      | A   | B   | NULL | NULL | NULL |
| 2      | 1      | C   | D   | NULL | NULL | NULL |
| 3      | 1      | E   | F   | NULL | NULL | NULL |
| 4      | 2      | E   | C   | NULL | NULL | NULL |
| 5      | 2      | A   | D   | NULL | NULL | NULL |
| 6      | 2      | F   | B   | NULL | NULL | NULL |
+--------+--------+-----+-----+------+------+------+

然后我在一个 php 页面中创建了一个表单,它使用该表中的数据来显示每场比赛的球队。

管理员使用此表格填写游戏分数和结果。见下表。在上表中存储值也需要此表。

input.php

<?php

mysql_connect("xxx", "xxx", "xxx") or die(mysql_error()); 
mysql_select_db("xxx") or die(mysql_error()); 

$query="SELECT games_team1, games_team2 FROM games WHERE round_id = 1";

$result = mysql_query($query);

?>

<form action="someform.php" method="post">
    <table id="inputgameresults">
        <tbody>
            <tr>
                <th>Home</th>
                <th>Score 1</th>
                <th>-</th>
                <th>Score 2</th>
                <th>Away</th>
                <th>Result</th>
                </tr>   

    <?php while($row = mysql_fetch_array($result)) { ?>  

            <tr>
                <td><?php echo $row['team1']; ?></td>
                <td><input type="text" name="score1[]"/></td>
                <td> - </td>
                <td><input type="text" name="score2[]"/></td>
                <td><?php echo $row['team2']; ?></td>
                <td><input type="text" name="result[]"/></td>
            </tr>   

    <?php } ?>

            <tr>
                <td></td>
                <td</td>
                <td</td>
                <td</td>
                <td</td>
                <td><input type="submit" value="Submit"/></td>
            </tr>
        </tbody>
    </table>                    
</form>

这会导致上述表格中的 3 行。此表显示每场比赛的球队以及得分和结果的输入字段。 一个标题,三行包含游戏,游戏后面的输入字段,以及下方的汇总按钮。

管理员可以使用以下表单提交输入。我添加了回声,以便检查输出是否正确。回声就像一个魅力。 这就是事情没有按照我希望的方式发展的地方。我使用的 sql 查询在表格中说明。它失败得很惨,可能是因为我缺乏知识。

form1.php

<?php

mysql_connect("xxx", "xxx", "xxx") or die(mysql_error()); 
mysql_select_db("xxx") or die(mysql_error()); 

$sc1 = $_POST['score1'];
$sc2 = $_POST['score2'];
$res = $_POST['result'];

foreach($sc1 as $value) {
    echo "score team 1 $value<br/>";
    mysql_query("UPDATE games SET game_score1 = '".$value[]"' WHERE games_id = [1,2,3] ");
}

foreach($sc2 as $value) {
    echo "score team 2$value<br/>";

}

foreach($res as $value) {
    echo "res $value<br/>";
}

?>

我敢肯定,除了主要问题之外,还有很多事情我可以改进,或者做得更有效率。虽然这不是我目前的主要关注点,但欢迎任何帮助:D

现在的主要重点是从数据库中正确位置的表单获取输入。表单中的数据需要在 score1、score2 和游戏结果列中发送到数据库。

欢迎任何帮助或建议!

【问题讨论】:

  • 查看$_POST 变量的 PHP 文档中的此评论:php.net/manual/en/reserved.variables.post.php#87650。你应该做类似&lt;input name="game_id[0][score1]" /&gt; 的事情,其中​​0 是game_id。然后访问input.php 中的关联数组,如同一评论中所述。
  • try: where games_id = "..." (在值周围使用引号)。另外,如果您想将数组存储在数据库中,请尝试查看序列化。
  • 在数据库中存储诸如数组之类的数据通常是一个坏主意,如果不是不可能的话,这将使对其进行任何类型的有用搜索变得困难,有时这会奏效好的,但我敢肯定,情况确实如此,另一种方法是属性值表,它有点复杂,但仍然很容易,并保持您搜索数据的能力。

标签: php mysql database forms


【解决方案1】:

将整个数组存储在数据库列中的一种简单方法是将数组编码为 json ...在示例中,$sc1 是您要存储的数组

mysql_query("UPDATE games SET game_score1 = '". json_encode($sc1) . "' WHERE        
     games_id = [1,2,3,4,5,6,7,8,9] ");

那么当你从 colomnu 获取你的数组时,它仍然是 json 格式,所以你需要这样做

$array = json_decode($result);

有时您的数组包含带有'' 的元素,您需要做的就是使用

addslashes(json_encode($sc1))

而不是使用

json_encode($sc1);

【讨论】:

    【解决方案2】:

    看起来您只需要向 mysql 插入新行的语法。如果 game_id 自动递增,则不必在语句中指定:

    INSERT games (round_id, team1, team2, score1, score2, result) 
    VALUES (3, 4, 6, 18, 1, 0, 1);
    

    【讨论】:

      【解决方案3】:

      在此先感谢你们为我的问题提供可能的解决方案。我一定会调查他们的。

      我的一个朋友告诉我,我应该使用“密钥”,以便它能够在数据库中循环。有点像从数据库中检索数据时。这似乎奏效了。

      我使用了 $key++,所以它会从第一个 games_id 开始。

      foreach($sc1 as $key => $value) {
          $key++; 
          mysql_query("UPDATE games SET game_score1 = '".$value[]"' WHERE games_id = '".$key."' ");
      }
      

      我的下一个挑战是检索每个 round_id 并存储每个 round_id。 为了让它更有趣,当前日期将指向当前的 round_id :D

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-17
        • 1970-01-01
        • 2016-10-06
        • 2013-09-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多