将数组更新到mysql表中

时间:2012-10-15 14:53:18

标签: php arrays

我需要将数组更新到mysql表中。

这是我的数组

[cat2] => Array
                (
                    [0] => 34
                    [1] => 48
                    [2] => 49
                    [3] => 46
                )

我希望我的输出为34,48,49,46,进入一个叫做商店和名为category的列的表。这是我写的代码,$ shop ['cat2']包含我在上面发布的数组。请帮我。此类代码在列类别

的所有字段中仅保留34个
foreach ($shop['cat2'] as $k => $v) {
    $query = "UPDATE shops SET categories2=$v";
    mysql_query($query);
    }

2 个答案:

答案 0 :(得分:0)

查看implode函数:implode(",", $shop['cat2'])

您可能还想查看Foreign Keys。使用外键时,可以使用join SQL语句从多列中检索数据。将类别存储为一个字段时,就像在您的示例中一样,这是不可能的。

您需要一个新表格:ShopCategory包含列:ShopIDCategoryID,这些列与您的Shop和{{有外键关系分别为1}}表。

正如Michael Berkowski在评论中已经指出的那样,如果你不使用Category子句,这个SQL语句将更新所有商店的类别!

where

答案 1 :(得分:0)

为了将这些数组元素中的每一个应用到category列的一行,您需要首先从shops表中获取唯一ID,然后使用该表循环它更新查询的WHERE子句中的唯一标识符值:

我们将在mysql_fetch_assoc()循环内调用foreach()来为每个数组元素拉一行。这假设您有一列shops.id,这是每个商店的唯一标识符。

// If `id` is not the unique id per shop, substitute the correct column
$rowids = mysql_query("SELECT id FROM shops ORDER BY id");
if  ($rowids) {
  // Loop over your array, and do one update per array elem
  foreach ($cat2 as $cat) {
     $row = mysql_fetch_assoc($rowids);
     $id = row['id'];
     // Your values are ints, so no need to quote and escape.
     // If you do use other string values, be sure to mysql_real_escape_string() them and single-quote
     $upd = mysql_query("UPDATE shops SET category = $cat WHERE id = $id");
     // Report error on this iteration
     if (!$upd)  {
        echo "error updating $id" . mysql_error();
     }
  }
}
else {
   echo "Couldn't get row ids. " . mysql_error(); 
}