本帖最后由 rainxies 于 2013-03-11 10:20:33 编辑

解决方案 »

  1.   

    不要钻牛角尖
    SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name LIMIT 10;
    SELECT FOUND_ROWS();

    SELECT COUNT(*) FROM tbl_name
    SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name LIMIT 10;同样是执行两次查询
    在有 where 子句时,前者的效率要比后者高php 的数据库函数不允许一次执行多条 SQL 指令,是为了防范 SQL攻击
    比如($id 传入参数)
    select * from tbl_name where id=$id
    当$id = '1;delete from tbl_name';时,查询串变成
    select * from tbl_name where id=1;delete from tbl_name
    如果这个 delete from tbl_name 被执行的话,后果就可想而知了
    虽然
    select * from tbl_name where id='$id'
    就可以防止这种情况的发生。
    但是 php 并不能假定每个人都会将数值型数据用引号括起来
      

  2.   

    您的建议是老老实实写个select count语句了?是吧?
      

  3.   

    SQL注入我倒是比较了解,开发ASP.NET蛮多年了
    现在公司要用PHP,看SQL_CALC_FOUND_ROWS貌似不错,想提高下性能
      

  4.   

    SQL_CALC_FOUND_ROWS 是只在 mysql 才有的参数
    SQL_CALC_FOUND_ROWS告知MySQL计算有多少行应位于结果集合中,不考虑任何LIMIT子句。行的数目可以使用SELECT FOUND_ROWS()恢复。
      

  5.   


    对,正因为不考虑limit,我才想用它