我真的不知道这是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
答案 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);
}
}