2017-04-19 54 views
0

我用下面的查询通过PHP:PHP函数中查询

<?php 
    $this->db->query("INSERT INTO order` SET custom_field = '" 
    . $this->db->escape(isset($data['custom_field']) ? json_encode($data['custom_field']) : '') 
    . "', payment_company_id = '" . $firstvalue[1] 
    . "', payment_tax_id = '" . $secondvaluein . "); 
?> 

在custom_field柱插入正常完成,我需要使用它的分裂把它放在payment_company_id和payment_tax_id列值。

保存在custom_field的数据是这样的:

{"1":"value of first custom field","2":"value of second custom field"} 

我用下面的代码我的脚本之前:

<?php 
    $myfinalfield = $this->db->escape(isset($data['custom_field']) ? json_encode($data['custom_field']) : ''); 
    $array = explode('","', $myfinalfield); 
    $firstvalue = explode(':"', $array[0]); 
    $secondvalue = explode(':"', $array[1]); 
    $secondvaluein = str_replace('"}','', $secondvalue[1]); 
?> 

为了使用$ firstvalue [1]和$ secondvaluein到插入正如你看到上面的第一个查询,但我的列没有填充任何东西。对此有何想法?

P.S.此外,如果我输入希腊字符,那么即使在custom_field列中,即使它的排序规则是utf8_general_ci,我也会得到错误的编码。

谢谢您提前

+0

什么是'$ myvar'当您尝试'爆炸( )'到'$ array'中?它不应该是'$ myfinalfield'实际上? – DontVoteMeDown

+0

也许你发现我的错误!让我检查!关于编码的任何想法我都会问到底? –

+0

如果您打印查询而不是查询?你会得到什么? – HerrSerker

回答

1

我怀疑您运行您的查询后没有检查错误。

当我试图让你生成的查询字符串的感觉,我得到这个:

INSERT INTO order` SET custom_field = 'something', /* wrong! */ 
      payment_company_id = 'something', payment_tax_id = 'something); 

这不是有效的查询。以下将更有效。 (注意额外的反引号,并在查询结束的超密引号)。

INSERT INTO `order` SET custom_field = 'something', 
      payment_company_id = 'something', payment_tax_id = 'something'); 

做这种工作,你最好的办法是用PHP来创建一个包含你的查询字符串,然后使用字符串致电query()。这样,当事情不起作用时,您可以转储查询字符串并检查它们。

就像这样,调整你的代码。

$query = "INSERT INTO `order` SET custom_field = '" 
. $this->db->escape(isset($data['custom_field']) ? json_encode($data['custom_field']) : '') 
. "', payment_company_id = '" . $firstvalue[1] 
. "', payment_tax_id = '" . $secondvaluein . "'"; 
$this->db->query($query) || die ("Query failed: " . $query); 

(在生产Web应用程序,die()是因为它给垃圾给最终用户认为是有害的,但它很方便进行调试。)