[mysql]为真/假在 codeigniter 得到 tinyint 查询结果列的值

发布时间: 2017/4/9 23:53:33
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

列在 my_table 具有 tinyint 数据类型
a column of table contains tinyint datatype

CodeIgniter 模型类︰

public function get_all() {
    $query = $this->db->get('my_table');
    return $query->result();
}

查询结果返回 is_active 字段的值作为字符串"0"/"1"。我想作为真/假。因此,该字段的 json 数据是真/假。
控制器类︰

$query_result = $this->model->get_all();
echo json_encode($query_result);

怎么这样呢?

更新︰查询结果数组︰

Array (
[0] => stdClass Object
    (
        [brand_id] => 1014
        [brand_name] => Coca Cola
        [brand_logo] => coca_cola_logo2.png
        [is_active] => 1
    )

[1] => stdClass Object
    (
        [brand_id] => 1015
        [brand_name] => Hallmark
        [brand_logo] => hallmark_logo.jpg
        [is_active] => 0
    )

[2] => stdClass Object
    (
        [brand_id] => 1016
        [brand_name] => Binjar
        [brand_logo] => binjar3.png
        [is_active] => 1
    )

)

解决方法 1:

答案是不需要转换。

但如果你坚持......

在 PHP 方面,除了使用 array_map() 可以遍历结果集并将值转换为布尔值。

foreach($query_result as $result){
  $result->is_active = (bool) $result->is_active;
}

简单就好......但毫无意义。1 和 0 的整数将评估为 TRUE 和 FALSE 如使用松散的比较。

var_dump(1 == TRUE);
var_dump(0 == TRUE);

将输出

布尔值 true

布尔值 false

Javascript 也是能够测试返回的数据的"真实性",是否返回的值是 true"1" ,或整数 1

这里是一个控制器和视图来测试的前提。

控制器︰

<?php

class Testcase extends CI_Controller
{
  function __construct()
  {
    parent::__construct();
    $this->load->helper('form');
  }

  function index()
  {
    $this->load->view('test_view');
  }

  public function respond()
  {
    $data = array('asString' => '1', 'asBool' => TRUE, 'asInt' => 1);
    echo json_encode($data);
  }

}

视图︰

<!DOCTYPE html>
<html>
  <head>
    <title>Test</title>
    <script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
  </head>
  <body>
    <?= form_open("#", ['id' => 'form']); ?>
    <input type="submit" id="btn" value="Click Me!">
    <?= form_close(); ?>
    <div id="as-string"></div>
    <div id="as-bool"></div>
    <div id="as-int"></div>

    <script>
      $(document).ready(function () {
        $("#form").submit(function (event) {
          event.preventDefault();
          $.ajax({
            type: 'POST',
            url: 'testcase/respond',
            data: $('#form').serializeArray(),
            dataType: "json",
            success: function (data) {
              console.log(data);
              if (data.asString == true) {
                $('#as-string').text('String returned is True');
              } else {
                $('#as-string').text('String returned is False');
              }
              if (data.asBool == true) {
                $('#as-bool').text('Boolean returned is True');
              } else {
                $('#as-bool').text('Boolean returned is False');
              }
              if (data.asInt == true) {
                $('#as-int').text('Integer returned is True');
              } else {
                $('#as-int').text('Integer returned is False');
              }
            }
          });
        });
      });
    </script>
  </body>
</html>

提交表单产生这一结果在浏览器中

返回的字符串是真实

返回的布尔值为 True

返回的整数是真的

所以,改变的假像的各种表示形式返回

$data = array('asString' => '0', 'asBool' => FALSE, 'asInt' => 0);
echo json_encode($data);

并单击按钮生成

返回的字符串是假

返回的布尔值为 False

返回的整数是假

通知上的 javascript 代码使用松散的平等 ( == ) 为条件检查。如果您更改为严格平等 ( === ) 结果改变。

更改成功功能使用严格平等......

success: function (data) {
  console.log(data);
  if (data.asString === true) {
    $('#as-string').text('String returned is True');
  } else {
    $('#as-string').text('String returned is False');
  }
  if (data.asBool === true) {
    $('#as-bool').text('Boolean returned is True');
  } else {
    $('#as-bool').text('Boolean returned is False');
  }
  if (data.asInt === true) {
    $('#as-int').text('Integer returned is True');
  } else {
    $('#as-int').text('Integer returned is False');
  }
}

返回此数据从控制器

$data = array('asString' => '1', 'asBool' => TRUE, 'asInt' => 1);

产生这一结果

返回的字符串是假

返回的布尔值为 True

返回的整数是假

与"假"数据...

$data = array('asString' => '0', 'asBool' => FALSE, 'asInt' => 0);

结果是这

返回的字符串是假

返回的布尔值为 False

返回的整数是假

这样,通过使用松散的平等 ( == ) 你可以进行条件测试,而不理会你的控制器返回的数据类型。

官方微信
官方QQ群
31647020