mysql - CakePHP - 生成的查询无法与 SQL Server 一起正常工作

标签 mysql sql-server cakephp

我有一个正在从 MySql 移动到 Sql Server 的 CakePHP 应用程序。有一个查询似乎没有正确传输:

$this->Model->find('all', array(
        'conditions' => array(
            'Model.column' => array(1, 2, 3)
        )
    )
);

当我在 mysql 中使用这种语法时,它似乎“解压”了数组 正确,生成的查询类似于

“...其中‘Model.column’在 (1, 2, 3)...”

当我使用sql server时,生成的查询是

“...WHERE 'Model.column' IN 'Array'”...

这显然会产生错误。我昨天在 CakePHP Google Group 上发布了这个问题,但没有收到回复,所以我想我会尝试一下。如果有人有任何想法/建议,我将不胜感激。

最佳答案

生成它的代码在 dbo_source.php(函数 conditionKeysToString)中,虽然特定的数据库驱动程序可以覆盖它,但我从未见过这样做。

我的系统上有 1.2.5、1.2.6 和 1.3.0-RC1,它们都附加了“IN (”并且没有任何东西可以覆盖该功能。没有仅附加“IN”然后决定是否添加的实例是数组或标量值。Array 一词是在字符串上下文中评估数组变量时发生的情况。例如:php -r '$a = array(1,2,3); echo $a;' 将输出 Array .

检查两者中的 cake/VERSION.txt 文件。如果它们不同,请备份 SQL Server 实例上的 cake 目录并将其替换为来自 MySQL 的目录。

如果它们相同,请尝试转到 cake/libs/model/datasources 目录。希望你有 Unix 或 Linux,因为“grep -r ' IN ' *”会极大地帮助你。否则比较两个安装的 cake 之间的 dbo_soures.php 和 dbo/dbo_mssql.php,看看 conditionKeysToString 是否有任何差异。

最终我会升级到 1.2.6,以便您获得所有修复。

关于mysql - CakePHP - 生成的查询无法与 SQL Server 一起正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2417049/

相关文章:

asp.net - INSERT 语句与 FOREIGN KEY 约束冲突 "FK_UserCars_aspnet_Users"

testing - cakephp 测试套件 : import fixtures tables for HABTM

email - 如何使用 CakePHP 在后台发送电子邮件?

php - 在 while 循环中使用 GROUP_CONCAT 在一行中输出同一用户的多个数据库条目

mysql - 在 CREATE INDEX 期间失去与 MySQL 服务器的连接

sql - 行设计如何影响 MySQL 性能?

sql - 将数据合并在一列中是错误的吗?

sql-server - Hibernate 将 SQL Server 日期部分视为列而不是关键字

php - CakePHP 3.0 在模板中回显 css 文件的内容

php - 无法将 docker mysql 数据库连接到 codeigniter 应用程序