【问题标题】:MySQL PHP Integer columns not returned as stringMySQL PHP整数列未作为字符串返回
【发布时间】:2014-02-07 00:31:47
【问题描述】:

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

我四处搜索,但除了关于类型转换的 cmets 之外,没有关于某种配置参数的内容。我正在使用 laravel 4,它在本地和 y 实时服务器上使用相同的代码。

我不想对所有内容进行类型转换,只是希望将其作为字符串返回。我在本地使用 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

【问题讨论】:

  • 请出示您的代码。
  • 导致问题的原因是什么?
  • 您是否使用相同的 PHP 和 MySQL 版本,以及最重要的是 mysqli 扩展(如果您使用那个)版本?
  • 看看this,我认为你的问题与你的PHP版本在两个环境之间的差异有关
  • @Asok 似乎是我的问题,但它显示了作为 php 代码启用/禁用的示例。我在现场和本地都有相同的代码,所以这对我来说有点奇怪。

标签: php mysql pdo laravel wamp


【解决方案1】:

我仍然不清楚我的环境之间可能存在这种差异,但至少在 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
    )
),

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      //Word.php
      
      class Word extends Eloquent
      {
      
          //...
      
          public function getStatusAttribute($value)
          {
              return strval($value);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2011-07-16
        • 2019-04-25
        • 2020-07-19
        • 1970-01-01
        • 2013-12-03
        • 2013-06-17
        • 2017-01-03
        • 1970-01-01
        • 2015-12-28
        相关资源
        最近更新 更多