关于MYSQL的分页存储过程
问题其实很简单,就是参数无法传递到LIMIT里去,比如这么一句
1 | CREATE PROCEDURE `topic_list`(IN p1 INTEGER(11), IN p2 INTEGER(11)) |
这个p1和p2就没办法传进去
然后在网上找解决方法找了久,总算找到一篇,可惜。。。里面还是有错误的,最后把纠正后的解决方法给大家说说吧,用PHP的朋友肯定会碰到这个问题的。
思路就是把整个查询语句变成带有未知参数的字符串,有点类似于Zend_Db里面有个quteInto的用法
比如要生成一句WHERE语句,可以这么写
1 | $where = $dbobj->quoteInto('user_id = ?',$user_id); |
那么在存储过程里就可以这么解决了,就看我前面那个举例,改成这样就可以执行
1 | CREATE PROCEDURE `topic_list`(IN p1 INTEGER(11), IN p2 INTEGER(11)) |
意思的话可以从这几个英文单词里得知,那两个?其实就是那个未知的参数,后面用了USING把p1和p2这两个参数成功的传入了LIMIT查询的语句中去。
(早上起来发现写错了一个地方,删除的部分应该改成s1)
原文作者: linyupark@gmail.com
原文链接: https://linyupark.github.io/2007/02/04/bka-2007-about-mysql-procedure/