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

你可能感兴趣的:(PDO中limit语句的注意事项)