der*_*ida 9 php sql-server laravel
我想从我的数据库返回INT作为整数.目前,所有值都作为字符串加载.数据库是MSSQL 2012,我使用PDO驱动程序(适用于v5.6).
试图在这里设置属性(如fideloper.com上所示,但我不知道是否仍然可以):
'sqlsrv' => [
'driver' => 'sqlsrv',
'charset' => 'utf8',
'prefix' => '',
......
'options' => array(
PDO::ATTR_STRINGIFY_FETCHES => false,
PDO::ATTR_EMULATE_PREPARES => false,
),
],
Run Code Online (Sandbox Code Playgroud)
但总是得到一个错误:
SQLSTATE[IMSSP]: The given attribute is only supported on the PDOStatement object.
Run Code Online (Sandbox Code Playgroud)
如何设置PDO驱动程序的任何设置以将INT作为整数而不是字符串返回.
这仍然无效:
$pdo = DB::connection()->getPdo();
$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
.. do ORM Query
Run Code Online (Sandbox Code Playgroud)
带来同样的错误.
也许有人可以帮助我?
Cod*_*iee 15
我知道这是一个旧线程,但我找到了针对MSSQL驱动程序和PHP 7的这个问题的全局解决方案(影响所有表/模型的单一更改).希望这将有助于其他正在努力奋斗的人.
php/ext
文件夹中(替换/删除旧版本).您可能需要停止/启动您的Web服务器(当然,如果是IIS)以释放原始文件以进行替换/删除. 如果文件名已从您安装的先前版本更改,请更新您的php.ini
文件.更新驱动程序配置以包含新PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE
参数:
'sqlsrv' => [
'driver' => 'sqlsrv',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'database'),
'username' => env('DB_USERNAME', 'laravel'),
'password' => env('DB_PASSWORD', 'password#1'),
'charset' => 'utf8',
'prefix' => '',
'options' => array(
PDO::ATTR_STRINGIFY_FETCHES => false,
PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE => true
),
],
Run Code Online (Sandbox Code Playgroud)为了解释这个解决方案,我通过Git Repository上的源代码来找到它.当然,如果我首先阅读README文件的Announcements部分,那将会容易得多:
2016年7月28日(4.1.0):由于社区的意见,此版本扩展了驱动程序的功能,还包括一些错误修复:
SQLSRV_ATTR_FETCHES_NUMERIC_TYPE
连接属性标志被添加到PDO_SQLSRV驱动程序,以处理具有数字Sql类型的列的数字提取(只有bit,integer,smallint,tinyint,float和real).该位可以用在设置其值被接通PDO::setAttribute
到true
,例如,$conn->setAttribute(PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE,true);
如果SQLSRV_ATTR_FETCHES_NUMERIC_TYPE
被设置为true
从一个整数列的结果将作为一个表示int
,同样地,SQL类型浮动和实际将表示为float
.注意例外:
- 当连接选项标志
ATTR_STRINGIFY_FETCHES
打开时,即使SQLSRV_ATTR_FETCHES_NUMERIC_TYPE
打开,返回值仍将是字符串.- 当绑定列中返回的PDO类型为时
PDO_PARAM_INT
,即使SQLSRV_ATTR_FETCHES_NUMERIC_TYPE
关闭,整数列的返回值也将为int .
我相信这个问题与使用的 PDO 驱动程序有关(随 PHP 安装,而不是 laravel 配置)。
不完全是您正在寻找的内容,但可能会解决您的问题。从 Laravel 5 开始,Eloquent 上有一个强制转换功能,您的列会自动强制转换为预定义的类型。请参阅http://laravel.com/docs/5.0/eloquent#attribute-casting
// Eloquent Model
protected $casts = [
'int_column' => 'int',
];
Run Code Online (Sandbox Code Playgroud)
int_column
当从数据库检索模型时,您将自动转换为 int
归档时间: |
|
查看次数: |
11103 次 |
最近记录: |