【问题标题】:Inserting an array to mysql using php使用php将数组插入mysql
【发布时间】:2014-02-07 03:45:52
【问题描述】:

我有这两个文本字段,要求用户输入两个限制为 49 个数字的数字,这样我就可以有一个数字 1 到 50、151 到 200、或 27551 到 27600 的数组,但一系列 49 个连续数字,我的问题是我不知道如何将它们放入数据库中,我不知道我一直在搜索有关插入数组的所有内容,但它们不适用于我的情况,

这是我的表格

 <form id="form3" name="form1" method="post" action="">
    <p>From:
    <input type="text" name="from" id="form_number" class="from" /> 
    - To:
    <input type="text" name="to" id="form_number" class="to" />
    </p>
    <p>Waybill Booklet:
    <select name="waybill_booklet[]" id="form_list">
        <?php
            do {  
        ?>
        <option value="<?php echo $row_Booklet['id_waybill_booklet']?>"><?php echo $row_Booklet['booklet_no']?></option>
        <?php
            } while ($row_Booklet = mysql_fetch_assoc($Booklet));
            $rows = mysql_num_rows($Booklet);
            if($rows > 0) {
            mysql_data_seek($Booklet, 0);
            $row_Booklet = mysql_fetch_assoc($Booklet);
            }
        ?>
    </select>
    </p>
    <p>
    <input type="hidden" name="status[]" value="4" />
    <input type="submit" name="button" id="form_button" value="OK!" />
    </p>
</form>

49 系列连续数字将使用从下拉菜单中选择的外键插入数据库,隐藏字段中的值为 4,因此我的表 1 中基本上有 4 列对于主键 1 表示数字系列,1 表示外键,最后一个将是数字的值。

这是我获取数字系列的 php 代码

<?php
$booklet = $_POST['waybill_booklet'];
$status = $_POST['status'];
$from = $_POST['from'];
$to = $_POST['to'];
$number = range($from,$to);

$count = 0;
$myArray = range($from,$to);
while($count<=49){
if($count<49){
    echo $myArray[$count]. ", ";
}else{
    echo $myArray[$count];
}
$count++;
}
?>

我不知道如何插入数据的

【问题讨论】:

  • 您在寻找implode()吗?
  • 如果fromtwo总是相差49,为什么用户需要输入两个数字?只需输入第一个或最后一个数字,然后计算另一个。
  • 我拥有所有这些联系和东西。我只需要关于如何插入数据的帮助,我不认为 implode 会起作用,我只需要将一系列数字插入到数据库中,每个都有不同的主 ID
  • 如果你需要这样做,只需编写一个循环,将每个数字插入一个新行。
  • @Barmar 它曾经是任何数字,但我将其限制为 49 以减少用户输入错误我希望它灵活,因此如果用户想要 1-100 系列,我可以更改它

标签: php mysql sql arrays


【解决方案1】:
$waybill = mysql_real_escape_string($_POST['waybill_booklet'][0]);
$status = mysql_real_escape_string($_POST['status'][0]);
foreach (range($from, $to) as $number) {
    $sql = "INSERT INTO yourTable (id, waybill, status) VALUES($number, '$waybill', '$status')");
    mysql_query($sql) or die(mysql_error());
}

您还应该切换到 PDO 或 mysqli,这样您就可以使用参数化查询,而不是在查询中替换字符串。那么你就不需要像那样转义这些值了。

【讨论】:

  • 通过查看此代码,我认为这将引导我找到正确的路径,感谢 barmar 将对此进行测试并在可行时接受答案。
  • mysql_real_escape_string() 期望参数 1 是字符串,数组给定我得到这个 $waybill 和 $status
  • 请参阅我上面关于在这些输入名称后不需要括号的评论。
  • 感谢 barmar,你给我的代码我几乎就在那里。只是关于变量未定义的一些小问题。
【解决方案2】:

您可以使用json_encode($myArray_series_of_numbers) 将其存储为json 字符串,而不是将其存储为数组(因为您想将其存储为批量,我假设它不会涉及任何直接的数据库级聚合或计算)。这使您可以灵活地将它们存储为字符串列,当您检索它时,您可以使用json_decode($model-&gt;series_of_numbers_column,true) 将其作为数组取回,以便在 PHP 中轻松计算。

希望对你有帮助

【讨论】:

  • 我不会将它们作为数组存储在数据库中,我只需要将它们放在数据库中,每个都有不同的主 ID,而不是作为数组
  • 您能否举例说明它在数据库中的外观。这可能有助于了解您到底在寻找什么?
【解决方案3】:

这是一个在 php http://www.w3schools.com/php/php_mysql_insert.asp 中使用 mysql 的教程,特别是 INSERT 命令。只需将您的数据构建到变量中而不是回显它,然后按照指南与数据库进行交互

这里是为每个数组元素生成主ID的自动增量教程http://www.w3schools.com/sql/sql_autoincrement.asp

您可以通过构建多个插入 sql 字符串来大大提高插入速度并在一次提交中完成。然后使用上面的插入指南运行它。

INSERT INTO Table ( Column1, Column2 ) VALUES
( Value1, Value2 ), ( Value1, Value2 )

【讨论】:

  • 是的,我知道基本的插入,但是我如何将变量 $numbers 插入到数据库中 $numbers 包含一系列数字
  • @user3282248 在您在 abisheks 回答中澄清之后,您可以使用自动增量表轻松地做到这一点......只需像通常将它们与外键关联一样插入......主自动增量键将保持他们都是分开的
  • 是的,我的主 ID 有自动递增键,但我的问题是如何通过一次提交插入所有数字的记录,
  • 每个系列是一个新行还是一个系列?
  • 是的,@clancer,答案应该可以帮助您通过单个插入调用进行多次插入,如果您确定bulk inserts,请防止使用for-loopinsert,如果您想为每个插入执行任何操作,那么您将不得不使用@Barmar's answer
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-10
  • 2011-04-27
  • 1970-01-01
  • 2016-12-21
  • 2011-08-11
  • 2015-12-18
相关资源
最近更新 更多