php - CakePHP 正在将 MySQL 整数转换为字符串……搞乱了 rand() 函数

标签 php mysql cakephp random

我想使用 CakePHP 从我的数据库中随机获取数据样本。这是我的功能:

function categories_list() 
{   
    $this->paginate['limit'] = 6;
    $this->paginate['order'] = '';
    $this->paginate['conditions'] = '';

    // Sort Randomly Start 
    if ($this->Session->check('Category.randomSeed')) 
    { 
        $seed = $this->Session->read('Category.randomSeed'); 
    } else { 
        $seed = mt_rand(); 
        $this->Session->write('Category.randomSeed', $seed); 
    } 
    $this->paginate['order'] = sprintf('RAND(%d)', $seed); 
    // Sort Randomly End 

    $this->set('cat_ajax_items', $this->paginate('Category')); 
}

问题是,Cake 发送到数据库的查询总是对 RAND() 部分执行这个,使 MySQL 陷入困惑:

ORDER BY RAND(`1235123412341`)

测试手动查询,它工作得很好,并在格式化时返回一个示例:

ORDER BY RAND(1235123412341)

有什么方法可以让 Cake 停止自动格式化?我放入 RAND() 函数的任何内容都会被转储到字符串引号中。

最佳答案

Anything I put into that RAND() function gets dumped into string quotes.

不,这是不正确的。如果它使用字符串引号那么它会工作正常,但是反引号不是字符串引号。问题在于 CakePHP 引用数字时就好像它是一个列名。尝试使用单引号引用该值:

"RAND('%d')"

这将导致生成以下 SQL:

ORDER BY RAND('1235123412341')

这与不包含引号时的结果相同。

关于php - CakePHP 正在将 MySQL 整数转换为字符串……搞乱了 rand() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4835849/

相关文章:

php - 在 Cakephp 中使用不等于运算符

cakephp - 在 CakePHP 中手动授权用户

php - 如何在 php 中获取两位数的年份?

javascript - 无法将数据从一个表复制到另一个表

php - 如果我使用 $_GET 变量进行 MYSQL 查询,空字节注入(inject)会影响我吗?

php - Laravel 5.4 中使用多表连接处理数百万行的高效且事务安全的方法

java - Eclipse Oxygen 没有 MySql 的驱动程序定义

mysql - 'Project3.x' 中的 EF OData MySql 未知列 'where clause'

PHP 查询 - 帮助将两个查询链接到 1 个 echo 语句

database - cakephp 错误。连接到数据库...不是... : Access denied for user 'my_app' @'localhost' (using password: YES)