PDO中limit语句的注意事项

1.我们知道在Php中准备语句的执行有execute(array())的方式,还有bindParam()的方式,但是通过项目发现,当准备语句中含有limit ?,?的时候,就必须用bindParam()这一种方式:

        $sql= "select Pic,Description,SaleAccount,SellPrice from Product limit ?,?";
        $stmt = $conn->prepare($sql);
        $stmt->bindValue(1, $begin-1, PDO::PARAM_INT);
        $stmt->bindValue(2, $end-$begin+1, PDO::PARAM_INT);
        $stmt->execute();

2.要注意,在limit ?,?语句的前提下,在bindParam()参数中,当是 PDO::PARAM_INT的时候,一定注意要将第二个传入的参数保证是整形,通常第二个参数往往是$_POST["XXX"]得来的一个值,这里要注意要将$_POST[]的值intVal()转换成整形

下面看一种情况:

$sql="select * from test2 limit 0,?";
$stmt=$conn->prepare($sql);
$row=1;
$stmt->bindParam(1,$row,PDO::PARAM_INT);
$stmt->execute();

foreach($stmt as $row){
    echo $row["id"];
}

//能得到正确结果

下面看一种情况:

$sql="select * from test2 limit 0,?";
$stmt=$conn->prepare($sql);
$row='1';
$stmt->bindParam(1,$row,PDO::PARAM_INT);
$stmt->execute();

foreach($stmt as $row){
    echo $row["id"];
}

//不能得到正确结果

3.要注意,在没有limit ?,?语句的前提下,在bindParam()参数中,当是 PDO::PARAM_INT的时候,第二个传入的参数可以是整形也可以是字符串

下面看一种情况:这里bindParam()的第二个参数是string但是依然能够成功执行的原因是$sql中没有limit ?,?

$sql="select * from test2 where id=?";
$stmt=$conn->prepare($sql);
$id='4';
$stmt->bindParam(1,$id,PDO::PARAM_INT);
$stmt->execute();

foreach($stmt as $row){
    echo $row["id"];
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 11,191评论 0 4
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,084评论 19 139
  • Yii提供了强大的数据库编程支持。Yii数据访问对象(DAO)建立在PHP的数据对象(PDO)extension上...
    layjoy阅读 7,512评论 0 6
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,142评论 18 399
  • 那天去海边 看见两对情侣 一对像是大学生模样 另一对在拍着婚纱照 真的只是觉得人比风景更美 我也是脱了鞋子各处蹦蹦...
    痴者儿阅读 1,418评论 0 0

友情链接更多精彩内容