查询中的PHP函数

时间:2017-04-19 11:02:49

标签: php mysql

我通过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。此外,如果我输入希腊字符,那么即使在其排序规则为utf8_general_ci时,即使在custom_field列中,我的编码也是错误的。

提前谢谢

1 个答案:

答案 0 :(得分:1)

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

当我试图弄清楚你正在生成的查询字符串时,我得到了这个:

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

这不是一个有效的查询。以下更有效。 (注意查询结尾处的额外反引号和额外的close-quote。)

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);

(在生产网络应用中,die()被视为有害,因为它会给最终用户带来垃圾。但它对调试很方便。)