我在使用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将使用默认的数据类型,这是一个字符串