我通过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列中,我的编码也是错误的。
提前谢谢
答案 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()
被视为有害,因为它会给最终用户带来垃圾。但它对调试很方便。)