MySQL PHP Integer列未作为字符串返回

时间:2014-01-17 15:44:03

标签: php mysql pdo laravel wamp

我真的不知道这是MySQL还是PHP问题。在我的实时服务器上,整数列作为字符串返回,这是我一直以来的方式。但是在我的本地服务器上,它们将以整数而不是字符串形式返回。

我搜索了一下,但除了关于类型转换的评论之外,没有任何关于某种配置参数的信息。我正在使用laravel 4,它在本地和现场服务器上都是相同的代码。

我不想对所有内容进行类型转换,只是希望将它作为字符串返回。我在本地使用wamp和我的服务器和本地之间的mysql和php的版本或非常接近所以我想它在某处是某种配置?

修改

代码很简单:

$word = Word::first(array('status'));

echo $word->status === '1' ? 'true' : 'false'; // returns false
echo $word->status === 1 ? 'true' : 'false'; // returns true

对于我的MySQL和PHP版本,它们几乎相同:

直播:php5.4.20,mysql5.5.34 本地:php5.4.16,mysql5.6.12

3 个答案:

答案 0 :(得分:3)

我仍然不清楚我的环境之间可能存在这种差异,但至少在Laraval中,您可以在数据库配置中设置pdo属性:

'mysql' => array(
    'driver'    => 'mysql',
    'host'      => 'localhost',
    'database'  => 'xxxxxxx',
    'username'  => 'xxxxxxx',
    'password'  => 'xxxxxxx',
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
    'options'   => array(
        PDO::ATTR_STRINGIFY_FETCHES => true
    )
),

我想这至少有助于使其保持一致,无论其他开发人员可能在本地设置了什么。

答案 1 :(得分:1)

此外,使用三元运算符===时会进行类型检查。在完成任何值比较之前,将比较两个实体的类型。如果两种类型不匹配,则立即返回 false

在这种情况下,使用==会返回一致的结果,但JavaScript中经常使用===维护数据类型的完整性。

答案 2 :(得分:0)

在Laravel 4中,您可以设置Accessors & Mutators来规范化从数据库返回的值。例如:

//Word.php

class Word extends Eloquent
{

    //...

    public function getStatusAttribute($value)
    {
        return strval($value);
    }
}