【问题标题】:Store associative array in database using serialize in php使用 php 中的序列化将关联数组存储在数据库中
【发布时间】:2014-01-28 22:55:11
【问题描述】:

我之前已经问过这个问题,现在我知道如何序列化它了。但现在问题是我遇到了这个错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''address1t', 'address2t', 'cityt', 'provincet', 'postalCODEt', 'contactNOt', 'em' at line 1

这是我的关联数组:

Array ( [0] => Array ( [recNAME] => NAME1 [company] => [address1] => ADDRESS1 [address2] => [city] => CITY1 [province] => PROVINCE1 [postalCODE] => 0 [contactNO] => 926XXXXX [email] => XXXXX@yahoo.com [commodity] => COMMODITY1 [type] => [weight] => 0 [length] => 0 [width] => 0 [height] => 0 [decVAL] => 0 [specINSTRUC] => [shipREF] => REF1 [payMETHOD] => CashOnDelivery [packNO] => 200XXXX-XXX [trackNO] => 200XXXX-XXX ) [1] => Array ( [recNAME] => NAME2 [company] => [address1] => ADDRESS2 [address2] => [city] => CITY2 [province] => PROVINCE2 [postalCODE] => 0 [contactNO] => 905XXXXXX [email] => XXXXX@hotmail.com [commodity] => COMMODITY2 [type] => [weight] => 0 [length] => 0 [width] => 0 [height] => 0 [decVAL] => 361 [specINSTRUC] => I'm in the above given address from M-F, 11AM-6PM, call or text me for confirmation [shipREF] => 200XXXXX [payMETHOD] => CashOnDelivery [packNO] => 200XXXX-XXX [trackNO] => 200XXXX-XXX ) )

序列化后的数组是这样的:

a:4:{i:0;a:21:{s:7:"recNAME";s:18:" NAME1";s:7:"company";s:0:"";s:8:"address1";s:57:"ADDRESS1";s:8:"address2";s:0:"";s:4:"city";s:8:"CITY1";s:8:"province";s:8:"PROVINCE1";s:10:"postalCODE";s:1:"0";s:9:"contactNO";s:10:"9XXXXXXXX";s:5:"email";s:21:"XXXX@yahoo.com";s:9:"commodity";s:13:"COMMODITY1";s:4:"type";s:0:"";s:6:"weight";s:1:"0";s:6:"length";s:1:"0";s:5:"width";s:1:"0";s:6:"height";s:1:"0";s:6:"decVAL";s:2:"99";s:11:"specINSTRUC";s:0:"";s:7:"shipREF";s:9:"200XXXX";s:9:"payMETHOD";s:14:"CashOnDelivery";s:6:"packNO";s:14:"200XXXX-XXX";s:7:"trackNO";s:14:"200XXXX-XXX";}i:1;a:21:{s:7:"recNAME";s:32:" NAME2";s:7:"company";s:0:"";s:8:"address1";s:52:"ADDRESS1";s:8:"address2";s:0:"";s:4:"city";s:6:"CITY2";s:8:"province";s:12:"PROVINCE2";s:10:"postalCODE";s:1:"0";s:9:"contactNO";s:10:"9XXXXXX";s:5:"email";s:23:"XXXX@hotmail.com";s:9:"commodity";s:7:"Spyder ";s:4:"type";s:0:"";s:6:"weight";s:1:"0";s:6:"length";s:1:"0";s:5:"width";s:1:"0";s:6:"height";s:1:"0";s:6:"decVAL";s:3:"361";s:11:"specINSTRUC";s:83:"I'm in the above given address from M-F, 11AM-6PM, call or text me for confirmation";s:7:"shipREF";s:9:"200XXXXX";s:9:"payMETHOD";s:14:"CashOnDelivery";s:6:"packNO";s:14:"200XXXX-XXX";s:7:"trackNO";s:14:"200XXXX-XXX";}}

这是我的序列化代码:

$newstring = serialize($array);
@mysql_query("INSERT INTO `temp` (`recNAMEt`, `companyt`, 'address1t', 'address2t', 'cityt', 'provincet', 'postalCODEt', 'contactNOt', 'emailt', 'commodityt', 'typet', 'weightt', 'lengtht', 'widtht', 'heightt', 'decVALt', 'specINSTRUCt', 'shipREFt', 'payMETHODt', 'packNOt', 'trackNOt' ) VALUES('', $newstring)") or die('Error: ' . mysql_error()); 

这是我第一次序列化,我仍在处理事情。我仍然不知道出了什么问题,因为这段代码适用于普通数组。我试过这样做:

VALUES('', '', $newstring)")

仍然没有运气。 recNAMEt、companyt 等是我表中的列名。请帮忙。谢谢和问候。

【问题讨论】:

标签: php mysql database serialization associative-array


【解决方案1】:

你错了@nicole

首先将数组转换成字符串序列化

所以有两种方法

a) 在数据库中有一个列,并在该列中插入序列化数组 \

例如:

Instead of this

  @mysql_query("INSERT INTO `temp` (`recNAMEt`, `companyt`, 'address1t', 'address2t', 'cityt', 'provincet', 'postalCODEt', 'contactNOt', 'emailt', 'commodityt', 'typet', 'weightt', 'lengtht', 'widtht', 'heightt', 'decVALt', 'specINSTRUCt', 'shipREFt', 'payMETHODt', 'packNOt', 'trackNOt' ) VALUES('', $newstring)") or die('Error: ' . mysql_error()); 


    You can have

  @mysql_query("INSERT INTO `temp` (`details` ) VALUES($newstring)") or die('Error: ' . mysql_error()); 

当您从数据库中获取结果时,您将拥有该值,然后您将取回您的数组

b)这有点棘手,但会解决你的目的 这将生成您的查询

             $sql = sprintf(
              'INSERT INTO `temp`(%s) VALUES ("%s")',
               implode(',',array_keys($_newstring )),
               implode('","',array_values($_newstring ))
              );
            mysql_query($sql);

【讨论】:

  • 好的。所以序列化用于将数组保存在一列中。我想要做的是将数组中的数据保存到相应的表列中。我想我会找到另一种方法。我会尝试(b)。非常感谢! :D
【解决方案2】:

假设有一个带有多个复选框的表单,用户可以一次选择多个复选框,那么我们需要将这些值以数组格式存储在表格的单个列中。

看看下面的代码 sn-p 看看如何只用几行代码就可以做到这一点-:)

HTML 代码

<form action="path_to_action_page" method="post">
<input type="checkbox" name="value[]" value="value1">Value1
<input type="checkbox" name="value[]" value="value2">Value2
<input type="checkbox" name="value[]" value="value3">Value3
<input type="checkbox" name="value[]" value="value4">Value4
<input type="checkbox" name="value[]" value="value5">Value5

获取表单数据的PHP代码:-

$data= $_POST['value'];
$values= serialize($data);

将数据插入数据库的代码:-

//数据库连接代码

$insert_query = "INSERT INTO TABLE_NAME(col_name) VALUES('$values')";
$result_insert = mysql_query($insert_query);

从数据库中检索值的代码:-

$query = "SELECT col_name FROM TABLE_NAME WHERE condition_to_search_the_database";


$result = mysql_query($query);
 while($values = mysql_fetch_array($result)){


$values= unserialize($values['col_name']);



  foreach($values as $value)


 {
  //code to play with $value
  e.g. - print $value;


 }}

【讨论】:

    猜你喜欢
    • 2016-09-17
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    • 2013-08-14
    • 1970-01-01
    • 2014-01-19
    相关资源
    最近更新 更多