美文网首页
PDO中limit语句的注意事项

PDO中limit语句的注意事项

作者: Jacqueline_JS | 来源:发表于2017-07-29 10:22 被阅读0次

    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"];
    }
    

    相关文章

      网友评论

          本文标题:PDO中limit语句的注意事项

          本文链接:https://www.haomeiwen.com/subject/txvqlxtx.html