【问题标题】:Php SELECT-query returning null on fields that's not nullPhp SELECT-query 在非空字段上返回空
【发布时间】:2014-11-29 10:03:12
【问题描述】:

我有一个 php 文件,它返回一个 JSON 数组,我将使用它与 j​​avascript 一起使用来自 sql 数据库的新闻填充网站。 sql-query 在服务器上工作并返回我想要的信息。虽然 php 文件返回以下内容:

[{"rubrik":null,"ingress":null,"datum":"2014-11-10 16:11:54},{"rubrik":null,"ingress":null,"datum":"2014-11-28 23:17:02"}]

日期是正确的。尽管“rubrik”和“ingress”字段中有一些文本并且不为空。 数据库如下所示:

NAME    TYPE            COLLATION               NULL
rubrik  varchar(254)    latin1_swedish_ci       No
ingress text            latin1_swedish_ci       No
nyhet   text            latin1_swedish_ci       No
datum   timestamp                               No

现在不需要“nyhet”字段。

这就是我的 php 文件的样子。

$result = mysqli_query($con, "SELECT rubrik, ingress, datum FROM svensta_news");

$return_arr = array();

while ($row = mysqli_fetch_array($result))
{
    $row_array['title']=$row['rubrik'];
    $row_array['ingress']=$row['ingress'];
    $row_array['date']=$row['datum'];

    array_push($return_arr, $row);
}

echo json_encode($return_arr);

我无法理解这里有什么问题,为什么我的 php 在非 null 的字段上返回 null。

编辑:关于数据在数据库中的样子的信息

nyhetsId    rubrik          ingress         news        date
120         sometitle       Someingress     Null        2014-11-10 16:11:54
122         sometitle2      Someingress     Null        2014-11-28 23:17:02

【问题讨论】:

  • 如果数据库中的字段值为 null/blank(在 phpmyadmin 中设置为 null 的字段中),则返回 null.check 条件为 null 。 if($row['rubrik']!==NULL || $row['rubrik']!== ''){ $row_array['title']=$row['rubrik']; }else{ $row_array['title']=''; }
  • 对此有什么解决方案/解释吗?

标签: php mysql sql-server json


【解决方案1】:

我没有测试它,但我认为这应该可以。

$result = mysqli_query($con, "SELECT rubrik, ingress, datum FROM svensta_news");

$return_arr = array();

while ($row = mysqli_fetch_array($result))
{   
    $return_arr[] = array(
        'title' => $row['rubrik'],
        'ingress' => $row['ingress'],
        'date' => $row['datum'] 
    );
}

echo json_encode($return_arr);

【讨论】:

  • 这将返回与以前相同的 JSON,但实际上不为 null 的字段为 null。
【解决方案2】:

将 $row_array 初始化为数组()

也将代码更改为

array_push($return_arr, $row_array);

【讨论】:

  • 这样做会得到相同的结果。
【解决方案3】:
array_push($return_arr, $row);

不会从 while 条件中获取值,因为您声明了 $return_arr = array();

你应该使用:

$return_arr['title']=$row['rubrik'];
$return_arr['ingress']=$row['ingress'];
$return_arr['date']=$row['datum'];

在您的 while 条件下获取值。

使用 MySQL COLLATE 查询:

SELECT rubrik COLLATE latin1_swedish_ci AS rubrik, ingress COLLATE latin1_swedish_ci AS ingress, datum COLLATE latin1_swedish_ci AS datum FROM svensta_news

【讨论】:

  • 由于同样的问题与肮脏的 nullvalues 这也只返回数据库中的一行。
  • 尝试添加WHERE rubrik IS NOT NULL AND ingress IS NOT NULL AND datum IS NOT NULL,我认为您的问题出在查询上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-11
  • 2021-04-21
  • 1970-01-01
  • 1970-01-01
  • 2017-02-06
相关资源
最近更新 更多