CI 获取数据库数据类型总是为STRING 的解决方案

This isn’t something I have time to do today, but for anyone else who comes across this problem, you can probably enable json_encodeto output numbers from active records with the following steps:

1) Modify the mysql/mysql_resultphp file to include the$field->numeric metadata attribute.
2) Add an extra step to active record queries that uses CodeIgniter’s $this->db->field_data() totest for any fields with numeric==1
3) If numeric==1, cast that field’s value to a number.

function field_data()
        while (
$field mysql_fetch_field($this->result_id))
new stdClass();
$F->name         $field->name;
$F->type         $field->type;
$F->default        $field->def;
$F->max_length    $field->max_length;
$F->primary_key $field->primary_key;
$F->numeric $field->numeric// <!-- ADD THIS LINE
$retval[] $F;
return $retval;

Heavy reliance on JSON in my scenario might make the extra effortworthwhile, but most people might never run into this.

2、It’s a blunt wayto solve the problem, but “good enough” for me. The functioncomments are based on PHP’s settype() documentationat


function cast_fieldtypes($record$fieldTypes{
foreach($record as $fieldName => $value{
if(isset($fieldTypes[$fieldName])) {
$value $record[$fieldName];
            switch (
case 'boolean':
$value (bool) $value;
$value (int) $value;

$value (float) $value;
$value (string) $value;

return $record;

Here’s an exampleof how to use it:

// Declare the types for some of the fields (not necessarily all of them)
$fieldTypes array(
$record $this->db->get_where('content'array('id'=>1));
$casted_record cast_fieldtypes($record$fieldTypes);
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页