【问题标题】:How to select NULL if there are no data and display the data if it exist?如果没有数据如何选择NULL,如果数据存在则显示数据?
【发布时间】:2017-02-13 03:00:14
【问题描述】:

我想从 MySQL 数据库中选择 AS NULL。这是选择查询:

function get_new()
{
    $query = "SELECT DATE_FORMAT(curdate(),'%d/%m-%Y') AS date_created, NULL AS name, NULL AS address, NULL AS status FROM t_penomoran";
    $result = $this->db->query($query)->row();

    return $result;
}

这是控制器

public function add()
{
    $id         = 0;
    $master     = $this->MPenomoran->get_new();

    $data = array (
        'titlepage'     => APP_TITLEPAGE,
        'titleapp'      => 'Penomoran',
        'userid'        => $this->session->userdata('nip'),
        'id'            => $id,
        'record'        => $master,
        'error'         => '',
        'complete'      => 'true',
        'loadmethod'    => 'add',
        'contentpage'   => 'penomoran/detail');

    $this->load->view('shared/master_app', $data);
}

当我在视图上使用它时:

<?php echo $record->name; ?>

我不断收到Trying to get property of non-object error。如何解决?

我的表结构:

CREATE TABLE `t_penomoran` (
`nomor` int(50) NOT NULL,
`date_created` date DEFAULT NULL,
`name` varchar(100) DEFAULT NULL,
`jenis_pekerjaan` text,
`nominal` bigint(20) DEFAULT NULL,
`address` varchar(50) DEFAULT NULL,
`pic` varchar(100) DEFAULT NULL,
`keterangan` varchar(255) DEFAULT NULL,
`status` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin

【问题讨论】:

  • 你有$record的校验值吗(例如:var_dump())?
  • 它是NULL。应该是date, NULL, NULL, NULL吧??
  • t_penomoran 为空(0 行)?如果table为空,则查询结果=null正常。
  • 是的。它应该返回 1 个新行(日期、NULL、NULL、NULL)。
  • 不确定您要在这里做什么,请显示您想要的输出示例

标签: php mysql json codeigniter


【解决方案1】:

如果表为空(0行),查询结果=null正常。

如果要在行 ID x 存在时显示行数据,则应该选择列,而不是select NULL AS column,因为如果行数据存在,则所有列值永远为空。

所以,把代码改成SQL不要选择null,当查询结果为空时,返回一个默认集合,像这样:

function get_data( $id )
{
    $query = "SELECT
            DATE_FORMAT(curdate(),'%d/%m-%Y') AS date_created,
            `name`,
            `address`,
            `status`
        FROM `t_penomoran`
        WHERE `nomor` = '{$id}'";

    $result = $this->db->query($query)->row();

    if ( empty($result) ) {
        $result = (object)[
            'date_created' => date('d/m-Y'),
            'name' => null,
            'address' => null,
            'status' => null,
        ];
    }

    return $result;
}

【讨论】:

  • 好吧,实际上也将该功能用于编辑目的。如果 ID x 的值存在,则显示 ID x 的数据而不是 NULL 行
  • @ashura91 更新了答案。我现在看到了你的表结构,你的表没有列“ID”或任何主列,你需要设置它。
  • 你也可以这样检查if($result-&gt;num_rows() &gt; 0 )
【解决方案2】:

如果你就这样做怎么样...

if (empty($record->name)) { echo "Name"; }

【讨论】:

    【解决方案3】:

    您可以在选择查询中使用 mysql if-else,例如 -

    SELECT DATE_FORMAT(curdate(),'%d/%m-%Y') AS date_created, 
        IF(name IS NULL, '', name) AS name, 
        IF(address IS NULL, '', address) AS address, 
        IF(status IS NULL, '', status) AS status 
    FROM t_penomoran
    

    我执行了查询,它给出了如下所述的结果,没有任何错误 -

    date_created | name | address | status
    13/02-2017   |      |         | 1
    

    希望这会对你有所帮助。

    【讨论】:

    • 它给出了错误。仍然是NULL 而不是DATE, NULL, NULL, NULL
    • 如果插入空值,你是否在列的位置插入了空值,你能分享你的表结构吗?
    • 是的。如果没有插入数据,表允许 NULL 值
    • 我已经添加了表格结构。
    • 请看更新的。你期望的输出是什么?我在查询中没有发现任何错误。
    【解决方案4】:

    您的问题不是 NULL as 字段,而是:

    $query = "SELECT DATE_FORMAT(curdate(),'%d/%m-%Y') AS date_created, NULL AS name, NULL AS address, AS status FROM t_penomoran";
    
    address, AS status
    

    在 , 和这里的 AS 之间什么都没有。

    【讨论】:

    • 打错字了。是NULL AS Status
    • 如果你的代码中有错字,它会给你显示的确切错误。单个 NULL 通常表示 SQL 中存在错误,并且根本没有返回结果集。你能提供正在执行的实际代码行吗?复制粘贴。修正错字后提供的新行只有在表名错误的情况下才会失败。
    • 我已经检查了查询,查询中没有错字。
    猜你喜欢
    • 2021-10-16
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    • 2016-05-18
    • 2021-12-10
    • 2018-10-28
    • 1970-01-01
    • 2023-03-27
    相关资源
    最近更新 更多