Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO参数绑定的问题_Php_Mysql_Pdo - Fatal编程技术网

Php 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

我正在用纯PHP+PDO Mysql驱动程序构建一个CRUD

我有一个页面列出了数据库表中包含的数据,我想实现一些过滤器,但我一直坚持使用动态查询将参数绑定到PDO

例如,该代码在使用和不使用
$\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