【问题标题】:Store an array into MySQL将数组存储到 MySQL
【发布时间】:2014-10-03 17:45:18
【问题描述】:

我需要在同一列中存储两个值。这些是代码和名称,用连字符分隔。如何使用这个数组来做到这一点?

'name'=> $data['code']['name']

我阅读了有关序列化的信息,但我在这里没有看到如何实现它。

  public function addProduct($code, $name,  $photo, $data = array())
    {           
        if($photo == NULL) {
            // Product data
            $productData = array(
                'code'                  => $data['code'],
                'name'                  => $data['name'],
                'category_id'           => $data['category_id'],
                'subcategory_id'        => $data['subcategory_id'], 
            );
        } else {
            // Product data
            $productData = array(
                'code'                  => $data['code'],
                'name'                  => $data['name'],
                'category_id'           => $data['category_id'],
                'subcategory_id'        => $data['subcategory_id'],
                'image'                 => $photo
            );
        }

        if($this->db->insert('products', $productData)) {
            return true;
        } else {
            return false;
        }
    }

【问题讨论】:

  • 您的代码使用什么语言(适当标记?)
  • I need to store two values ​​in the same column 不要那样做。请改用两列。每列应对应一个且仅一个信息。
  • 并且在将数组存储在行中时可以有效地存储数组。
  • 确保你的'code','name','category_id'..等信息应该是表的列并根据存储数据。
  • 这是一个 coodeingiter 平台。我需要将这两个变量一起存储在同一行/记录中,列名或其他,如“代码”-“名称”。不可能吗?

标签: mysql arrays


【解决方案1】:

如果我理解正确,我想你想要这个:

'name' => serialize(array('code'=>$data['code'], 'name'=>$data['name']))

然后你可以简单地检索它

$data = unserialize($res['name']); 
echo $data['code']."-".$data['name'];

您也可以在serialize()unserialize() 的楼中使用json_encode()json_decode()。使用 JSON 的好处是您可以使用 JavaScript 等其他语言对其进行解码,而 seialize() 是 PHP 特定的函数。

【讨论】:

  • Adelphia 这真是我想要的!现在我正在处理检索数据的其他问题,因为它包括连接......是时候尝试克服这个问题了。谢谢!
【解决方案2】:

CodeIgniter 中有两种方法可以在数据库中插入数据。

方法一:普通SQL查询

public function addProduct($code, $name,  $photo, $data = array()){         
    $sql = "";
    if($photo == null){
        // Product data
        $d_code = isset($data['code']) ? $this->db->escape($data['code']) : '';
        $d_name = isset($data['name']) ? $this->db->escape($data['name']) : '';
        $d_category_id = isset($data['category_id']) ? $this->db->escape($data['category_id']) : '';
        $d_subcategory_id = isset($data['subcategory_id']) ? $this->db->escape($data['subcategory_id']) : '';
        $sql = "INSERT INTO mytable (code, name, category_id, subcategory_id) ";
        $sql .= "VALUES ('" . $d_code . "', '" . $d_name . "', '" . $d_category_id . "', '" . $d_subcategory_id . "')";
    } else {
        // Product data
        $d_code = isset($data['code']) ? $this->db->escape($data['code']) : '';
        $d_name = isset($data['name']) ? $this->db->escape($data['name']) : '';
        $d_category_id = isset($data['category_id']) ? $this->db->escape($data['category_id']) : '';
        $d_subcategory_id = isset($data['subcategory_id']) ? $this->db->escape($data['subcategory_id']) : '';
        $d_image = isset($photo) ? $this->db->escape($photo) : '';
        $sql = "INSERT INTO mytable (code, name, category_id, subcategory_id, image) ";
        $sql .= "VALUES ('" . $d_code . "', '" . $d_name . "', '" . $d_category_id . "', '" . $d_subcategory_id . "', '" . $d_image . "')";
    }
    $this->db->query($sql);
    if($this->db->affected_rows() > 0){
        return true;
    } else {
        return false;
    }
}

第二种方法:ActiveRecord

public function addProduct($code, $name,  $photo, $data = array()){         
    if($photo == null){
        // Product data
        $d_code = isset($data['code']) ? $this->db->escape($data['code']) : '';
        $d_name = isset($data['name']) ? $this->db->escape($data['name']) : '';
        $d_category_id = isset($data['category_id']) ? $this->db->escape($data['category_id']) : '';
        $d_subcategory_id = isset($data['subcategory_id']) ? $this->db->escape($data['subcategory_id']) : '';
        $dataArr = array(
           'code' => $d_code,
           'name' => $d_name,
           'category_id' => $d_category_id,
           'subcategory_id' => $d_subcategory_id
        );
    } else {
        // Product data
        $d_code = isset($data['code']) ? $this->db->escape($data['code']) : '';
        $d_name = isset($data['name']) ? $this->db->escape($data['name']) : '';
        $d_category_id = isset($data['category_id']) ? $this->db->escape($data['category_id']) : '';
        $d_subcategory_id = isset($data['subcategory_id']) ? $this->db->escape($data['subcategory_id']) : '';
        $d_image = isset($photo) ? $this->db->escape($photo) : '';
        $dataArr = array(
           'code' => $d_code,
           'name' => $d_name,
           'category_id' => $d_category_id,
           'subcategory_id' => $d_subcategory_id,
           'image' => $d_image
        );
    }
    $this->db->insert('mytable', $dataArr); 
    if($this->db->affected_rows() > 0){
        return true;
    } else {
        return false;
    }
}

备注

请记住,在这两种方式中,您都应该在 MySQL 数据库中拥有准确的结构。否则会出现“找不到列”等错误。

另一方面,您不能在 MySQL 中存储数组,但可以存储逗号分隔值 (CSV) 字符串,尽管根本不建议这样做:

$dataArr = array(
    $d_code,
    $d_name,
    $d_category_id,
    $d_subcategory_id
);
$csv = implode(",", $dataArr);

如果提供的任何数据包含逗号,此解决方案将导致问题。

为什么不应该在 MySQL 行中存储 CSV:

  • 应单独处理和保存每条信息。
  • 使用 MySQL 将无法在数据中进行搜索。
  • 忘记“索引”。在这种情况下是没有用的。另外,忘记查询优化。
  • 您正在查找特定信息,那么您可能应该查询所有表并遍历此信息以获取您正在查找的数据。
  • 没有开发人员会理解您的举动。
  • 它肯定会导致您在 CodeIgniter 中出现问题,尤其是在 ActiveRecord 方法中。
  • 在 CodeIgniter 中从数据库中插入/选择/更新/删除信息真的很容易:link
  • 如果这是您第一次使用 CodeIgniter,请多花几分钟阅读文档并好好学习。进行糟糕的 hack 不会帮助任何人,尤其是您自己,因为您最终会遇到错误和混乱的代码。

【讨论】:

  • 感谢 Wissam El-Kik!我不能投票,因为我没有足够的声誉,但非常感谢解释!最好的问候
猜你喜欢
  • 2011-03-25
  • 2011-07-26
  • 1970-01-01
  • 2015-08-23
  • 1970-01-01
  • 2012-04-28
  • 2015-11-24
  • 2015-01-18
  • 2014-06-02
相关资源
最近更新 更多