我正在使用PDO和MySQL,出于某种原因,当从数据库获取int类型的值时,PDOStatement返回数字的字符串表示而不是数字类型的值.我该如何防止这种情况发生?
我注意到有一个PDO类的属性:PDO::ATTR_STRINGIFY_FETCHES应该处理这个,但是,当试图修改它时,它会抛出一个错误,说该属性对MySQL驱动程序无效.
在咨询数据库时获取字符串而不是数字是否正常?
我注意到我的Laravel API没有将实体标识符(主键)作为整数返回.
在Api\PostController.php :: show()中:
function index()
{
$posts = Post::all();
return $posts;
}
Run Code Online (Sandbox Code Playgroud)
返回的内容如下:
[{
"id": "1",
"title": "Post one",
...
},{
"id": "2",
"title": "Post two",
...
}]
Run Code Online (Sandbox Code Playgroud)
这会弄乱我的表排序(因为ID将被排序为字符串:1,10,11,2等).
转储实体本身也表明该id属性是一个字符串.
如前所述这里可能的原因是,MySQL驱动程序不会在适当类型的返回值.
我在Ubuntu 14.04服务器上使用HHVM 3.3.1.有什么方法可以使用本机MySQL库(如php5-mysqlnd)用于HHVM吗?
我可以使用Laravel模型访问器来解决问题.但这更像是一个黑客IMO.
请帮忙!
参考文献:
编辑:我已经确认它不是Laravel的ORM层.PDO实例已将ID作为字符串返回.
首先 - 我的描述;)
我从服务器获得了一个XmlHttpRequests JSON响应.MySQL驱动程序将所有数据输出为字符串,PHP按原样返回,因此任何整数都以字符串形式返回,因此:
JS中的parseInt()函数是否有任何快速替代(hack)可以解析纯数字字符串,例如
var foo = {"bar": "123"};
...
foo.bar = parseInt(foo.bar); // (int) 123
Run Code Online (Sandbox Code Playgroud) 我正在使用Wordpress内部的WPDB对象与MySQL数据库进行通信.我的数据库有一个类型的列bit(1),但是,Wordpress不会将它们作为一个0或1我的生产服务器(它们在我的本地计算机上)提取.
题:
如果我有一个来自Wordpress的数据库值,我无法与0或进行简单的比较1:
if ($data[0]->Sold == 1) { //Always false
...
if ($data[0]->Sold == 0) { //Always false
Run Code Online (Sandbox Code Playgroud)
如何检查值是否0为1?
背景:
这不是我本地机器上的问题,而只是在生产中.
我像这样查询数据库:
$data = $wpdb->get_results("...");
Run Code Online (Sandbox Code Playgroud)
当我var_dump()对数据库的结果进行处理时,这是我的浏览器显示的输出:
array(1) {
[0] => object(stdClass)#261 (10) {
["SaleID"] => string(4) "1561"
["BookID"] => string(2) "45"
["MerchantID"] => string(1) "1"
["Upload"] => string(19) "2012-11-20 15:46:15"
["Sold"] => string(1) ""
["Price"] => string(1) "5"
["Condition"] => string(1) "5"
["Written"] => …Run Code Online (Sandbox Code Playgroud) 我试图获取变量类型,但我不知道为什么,总是说变量是一个字符串。
这是我的对象:
$ question
stdClass Object
(
[reply_id] => 8
[q_key] => 35BBs2xy1346230680
[answer] => 1
)
echo $question->answer." is a ".gettype($question->answer);
Run Code Online (Sandbox Code Playgroud)
输出为:
1是一个字符串
但是1是整数...
我究竟做错了什么 ?
我在我的PHP脚本中遇到问题,尽管从数据库中将标记为int和,但从MySQL调用的值仍以字符串形式返回tinyint。
这是一个问题,因为在将基于MySQL日期的数组转换为JSON数据时,应将整数值放在双引号中,这会在使用该JSON数据的Javascript和iPhone应用程序中引起麻烦。我"key" : "1"想要的是JSON值"key" : 1。
经过一些研究,似乎只要有PHP 5.3并安装了模块,就应该有可能将值作为其本机类型来获取mysqlnd。我有5.3.3,phpinfo()似乎表明我已mysqlnd安装并运行该模块:
mysqlnd enabled
Version mysqlnd 5.0.10 - 20111026
Run Code Online (Sandbox Code Playgroud)
但是,我的值仍然作为字符串返回。
我已经看过mysqlnd的PHP手册条目,并且总是有可能我遗漏了显而易见的内容,但是我没有看到任何指示我需要在代码中进行特定操作来获取本机值的东西。
我究竟该怎么做才能使PHP的MySQL函数获得本机类型的MySQL结果?
为了简化下面的回答,这是我用来连接数据库的命令:
private function databaseConnect()
{
$this->mysqli = new mysqli(Database::$DB_SERVER, Database::$DB_USERNAME, Database::$DB_PASSWORD);
$this->mysqli->set_charset("utf8");
return true;
}
private function dbConnect()
{
Database::$USE_MYSQLI = extension_loaded('mysqli');
if (!$this->databaseConnect())
{
echo "Cannot Connect To The Database Server";
throw new Exception();
}
if (!$this->databaseSelectDB())
{
echo "The database server …Run Code Online (Sandbox Code Playgroud)