【问题标题】:Array into Database [closed]数组到数据库[关闭]
【发布时间】:2013-12-14 09:16:18
【问题描述】:

我已经找了几个小时的遮阳篷了,但我无法弄清楚。 我拥有的是一个我想放入数据库的数组

if(isset($_POST['newvalue']))
            {
                $array = $_POST['newvalue'];
                $getcatidquery = mysql_query("SELECT * FROM categories_to_sales WHERE sales_id = $saleid");

                foreach($array as $value) {
                    while($getcatid = mysql_fetch_assoc($getcatidquery)) { 
                        $catid = $getcatid['categories_id'];
                    }
                    mysql_query("UPDATE categories_to_sales SET value = '$value' WHERE sales_id = '$saleid' AND categories_id = '$catid'");
                }

                echo "Executed a Query.";               
            }

上面的代码是当您按下更新表单的提交按钮时正在执行的代码。但是,此代码只会更新表单中的最后一个输入,而不是全部..

$_POST['newvalue'] 是数组,我也可以在 var_dump 中显示这个数组。

是的,我知道我没有使用 PDO,我也不想使用它,因为整个系统都是用 mysql 制作的,而且公司不会更新他们的 PHP 版本。 (我之所以这么说,是因为上次我的代码中只有这些 cmets。)

输入表单:

while($rowc = mysql_fetch_assoc($sql))
            {
                    echo '<br/>' . $rowc['categorie_name'] . ' - ' . $rowc['value'];
                    echo '<input type="text" class="valueField" name="newvalue[]" id="newvalue"/>';
            }

$sql = mysql_query("SELECT * FROM categories_to_sales
        LEFT JOIN sales ON categories_to_sales.sales_id=sales.sales_id 
        LEFT JOIN categories ON categories_to_sales.categories_id=categories.categorie_id 
        WHERE sales.sales_id = '$saleid'
        ");

【问题讨论】:

  • 不清楚。你想要什么?
  • 我想将数组 $_POST['newvalue'] 插入数据库中..
  • 可以添加表单代码吗?
  • 如果你不想使用 PDO,你至少应该使用mysql_real_escape 来避免 SQL 注入。
  • 基本上,这是一团糟。重新开始。

标签: php mysql arrays


【解决方案1】:

您可以使用序列化在数据库中存储 php 数组:

$becomeString = serialize($yourArray);

当您想将其作为数组返回时,请使用反序列化:

$returnArray = unserialize($myStringCreatedWithSerialize);

检查:

http://php.net/manual/en/function.serialize.php

http://php.net/manual/en/function.unserialize.php

【讨论】:

  • 不要只放一个链接。答案必须或多或少是一个完整的答案。由于 stackoverflow 是英文的,请链接到英文文档。请参阅@Siraj-Khan 的回答。和你一样,但写得好一点。
  • 我会的,下次!!谢谢
  • 你可以编辑你知道的答案
【解决方案2】:

你必须在你的 while 循环中执行你的 UPDATE 语句:

改变这个

                foreach($array as $value) {
                    while($getcatid = mysql_fetch_assoc($getcatidquery)) { 
                        $catid = $getcatid['categories_id'];
                    }
                    mysql_query("UPDATE categories_to_sales SET value = '$value' WHERE sales_id = '$saleid' AND categories_id = '$catid'");
                }

                foreach($array as $value) {
                    while($getcatid = mysql_fetch_assoc($getcatidquery)) { 
                        $catid = $getcatid['categories_id'];
                        mysql_query("UPDATE categories_to_sales SET value = '$value' WHERE sales_id = '$saleid' AND categories_id = '$catid'");
                    }
                }

【讨论】:

  • 由于某种原因,现在它只接收第一个输入。
  • 奇怪:你总是可以回显查询以查看执行了什么,并检查查询是否是你想要的,并且它不会删除以前的值。
【解决方案3】:

您可以使用序列化在数据库中插入数组,并使用从数据库中获取数组进行反序列化:

$arr = serailize($data);

$arr = unserailize($data);

更多详情请看:

【讨论】:

    【解决方案4】:

    如果您能够通过var_dump 获取数组值并希望将数组数据保存到数据库中,那么最好将数组数据编码为字符串并保存。 select语句取数据时,解码成数组格式。

    将数组数据编码成字符串:

    $encodedArray = json_encode($array);
    

    将字符串数据(json编码)解码成数组:

    $decodeArray = json_decode(MYSQL_FETCHED_VALUE, true);
    

    您也可以使用serializedeserialize 将数组数据保存到数据库中。

    希望会有所帮助!

    【讨论】:

      猜你喜欢
      • 2012-11-28
      • 2016-03-23
      • 2014-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-17
      相关资源
      最近更新 更多