sql语句在实际有值时返回null
Posted
技术标签:
【中文标题】sql语句在实际有值时返回null【英文标题】:Sql statement returns null when there is actually a value 【发布时间】:2014-02-15 05:54:50 【问题描述】:我在后端使用 Flight 框架来构建 RESTful 服务和 PDO 来从 mysql 检索数据。
require 'flight/Flight.php';
Flight::route('GET /satellites', function ()
$sql = "SELECT * FROM satellites";
try
$db = getConnection();
$stmt = $db->prepare($sql);
$stmt->execute();
$stmt->setFetchMode(PDO::FETCH_ASSOC);
$response = json_encode($stmt->fetchAll());
$db = null;
echo "sucess: true, records:" . "$response" . "";
catch (PDOException $e)
echo '"error":"text":' . $e->getMessage() . '';
);
Flight::start();
我得到这个 JSON 作为响应:
sucess: true,
records:[
"id":"1",
"dates":"01.01.2007 - 01.01.2011",
"satellite":null,
null:"98.2",
"resolution":"15",
"band":"30",
"price":"$15"
]
以上是正确的,但卫星不应该为空,它肯定有一个值(我通过PHPMyAdmin检查过)。还有一个名为 null 的列,其值为 98.2,应称为最低点。为什么叫null?
顺便说一句,卫星和最低点列的数据类型是 varchar(255)。然后我将卫星列数据类型更改为文本,但都一样。
【问题讨论】:
你的排序规则是什么? 你检查过是不是json_encode()
的问题? $stmt->fetchAll()
返回什么?
为什么db的字段名是null
顺便说一句,数据库中的文本是从 odt 文档中复制粘贴的。如果重要的话。
null
怎么可以是字段名(属性)???
【参考方案1】:
in getConnection(); you use
// You might missing this line set utf8
$pdoParams = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8;');
$params = array(
'host' => 'localhost', 'username' => 'username',
'password' => 'password',
'dbname' => 'dbname',
'driver_options' => $pdoParams
);
【讨论】:
【参考方案2】:在您的记录中可能有隐藏字符,如您的 var_dump 数据所示:
array(1)
[0]=> array(10)
["id"]=> string(1) "1"
["dates"]=> string(23) "01.01.2007 - 01.01.2011"
["satellite"]=> string(9) "SAT7" // This 4 character is showing count 9
["nadir"]=> string(4) "98.2"
["resolution"]=> string(2) "15"
["band"]=> string(2) "30"
["price"]=> string(3) "$15"
"SAT7"
以上实际上看起来像 4 个字符的单词,但它有一些隐藏字符,var_dump 显示计数。同样"nadir"
也有隐藏字符。
修复上述问题并继续
这里的 json 输出是这样的:
[
"id":"1",
"dates":"01.01.2007 - 01.01.2011",
"satellite":"SAT\u00ad7", // Hidden characters in value
"nadir\u00ad":"98.2", // Hidden characters in field
"resolution":"15",
"band":"30",
"price":"$15"
]
【讨论】:
以上是关于sql语句在实际有值时返回null的主要内容,如果未能解决你的问题,请参考以下文章