使用Laravel 5.1在Sybase int列中插入问题


Problems insert in Sybase int columns using Laravel 5.1

我在使用Laravel 5.1和Sybase的整数数据类型列的表中插入值时遇到了问题。

在异常中列出错误257。在sybase的文档中,这似乎是一个转换问题。我可以看到框架构建的insert sql类似于

insert into [table_name] ([col1], [col2]) values ('AAA', '999'))

所以,我可以看到Laravel将所有的值都传递到单引号中,在我看来,Sybase不接受这种结构。

我使用的是Linux Ubuntu,安装了freetds 5.0协议版本。

已经有人解决这种问题了吗?我是否缺少一些配置,或者我是否必须为Sybase工作与Laravel 5.1编写驱动程序扩展?

假设您正在使用Sybase ASE,问题是数据库特定的,它是从PHP PDO继承的,默认情况下将所有参数绑定为字符串,除非您使用bindValue()函数指定要绑定的数据类型

<?php
/* Execute a prepared statement by binding PHP variables */
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour');
$sth->bindValue(':calories', $calories, PDO::PARAM_INT);
$sth->bindValue(':colour', $colour, PDO::PARAM_STR);
$sth->execute();
?>

数据类型必须与表定义匹配。

在Laravel中,如果你使用eloquent,你可能需要重写Connection.php来绑定相应的参数,因为Laravel当前的代码不使用bindValue来绑定参数,因此,PDO将使用默认的数据类型,这是一个字符串