Php PDO参数绑定的问题
我正在用纯PHP+PDO Mysql驱动程序构建一个CRUD 我有一个页面列出了数据库表中包含的数据,我想实现一些过滤器,但我一直坚持使用动态查询将参数绑定到PDO 例如,该代码在使用和不使用Php PDO参数绑定的问题,php,mysql,pdo,Php,Mysql,Pdo,我正在用纯PHP+PDO Mysql驱动程序构建一个CRUD 我有一个页面列出了数据库表中包含的数据,我想实现一些过滤器,但我一直坚持使用动态查询将参数绑定到PDO 例如,该代码在使用和不使用$\u GET[“op”]时都能很好地工作 但是我不能让这个查询工作 <?php //some logic here to get $limit and $offset $params["limit"] = $limit; $params["offset"] = $offset; $tbl_que
$\u GET[“op”]
时都能很好地工作
但是我不能让这个查询工作
<?php
//some logic here to get $limit and $offset
$params["limit"] = $limit;
$params["offset"] = $offset;
$tbl_query = "SELECT * FROM cells WHERE 1 ";
if(!empty($_GET["op"])){
$tbl_query .= "AND op=:op ";
$params["op"] = $_GET["op"];
}
$tbl_query .= "ORDER BY cid LIMIT :limit OFFSET :offset";
//Prepare the query
$stmt = db()->prepare($tbl_query);
$stmt->execute($params);
$table = $stmt->fetchAll();
如果仔细查看错误消息,它会给出答案:
接近“20”偏移量“0”
参数都是字符串,其中需要整数。正如该报告所解释的:
所有值都被视为PDO::PARAM_STR
这就是为什么必须显式将它们定义为整数的原因:
$stmt->bindParam(':limit', $limit, PDO::PARAM_INT);
$stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
如果仔细查看错误消息,它会给出答案:
接近“20”偏移量“0”
参数都是字符串,其中需要整数。正如该报告所解释的:
所有值都被视为PDO::PARAM_STR
这就是为什么必须显式将它们定义为整数的原因:
$stmt->bindParam(':limit', $limit, PDO::PARAM_INT);
$stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
$pag\u查询
!=<代码>$tbl_query
我在这里写错了,但在我的代码中是对的:Pamazing。。。重新键入代码而不是复制和粘贴:)不,这是因为我编辑了一些内容,比如一些注释$pag_query
!=<代码>$tbl_query我在这里写错了,但在我的代码中是对的:Pamazing。。。重新输入代码而不是复制粘贴:)不,这是因为我编辑了一些东西,比如两个变量的一些注释:int(20)int(0)
,这不是problem@ClaudioKing我的错,我更新了答案。在这种情况下,您需要显式地定义整数。如果我有5/6子句,比如带有混合类型参数(int、string和float)的if(!empty($\u GET[“op”])
),如何做到这一点?@ClaudioKing MySQL在WHERE条件下非常宽容(比如您可以使用WHERE id='12'
检查整数列,并且它可以工作),但限制/补偿并不那么宽容。它们总是需要整数。@ClaudioKing检查变量类型并为其指定类型。类似于的东西是int($param)?PDO::PARAM_INT:PDO::PARAM_STR
var_两个变量的转储:INT(20)INT(0)
,这不是problem@ClaudioKing我的错,我更新了答案。在这种情况下,您需要显式地定义整数。如果我有5/6子句,比如带有混合类型参数(int、string和float)的if(!empty($\u GET[“op”])
),如何做到这一点?@ClaudioKing MySQL在WHERE条件下非常宽容(比如您可以使用WHERE id='12'
检查整数列,并且它可以工作),但限制/补偿并不那么宽容。它们总是需要整数。@ClaudioKing检查变量类型并为其指定类型。类似于的东西是int($param)?PDO::PARAM_INT:PDO::PARAM_STR