CakePHP正在将MySQL整数转换为字符串…弄乱了rand()函数教程
我想使用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')
与不包含引号的结果相同.