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