我遇到以下问题:
环境PHP,带PDO的代码点火器框架。
我的代码
public function index(){
$sql = "SELECT ........ LIMIT ?,?";
$q = $this->db->prepare($sql);
$limit = 0;
$offset = 10;
$q->execute(array($limit, $offset));
$r = $q->fetch();
var_dump($r);
}
问题:sql查询中没有问题,因为如果我在LIMIT子句中硬编码任何整数(例如0、10);查询返回所需的结果只有在绑定params时才会出现此问题。
显示错误在上面的代码中转储$r返回bool(false)
现在,以下代码成功运行,
public function index(){
$sql = "SELECT ........ LIMIT 0,10";
$q = $this->db->prepare($sql);
$q->execute();
$r = $q->fetch();
var_dump($r);
}
绑定时,前一个代码可能有什么问题?我这样做是错误的吗?还是有可能因为codeigniter默认不支持PDO而导致它逐渐蔓延?
根据建议,我给出了自己的答案。
不能通过子句将变量绑定到LIMIT或ORDER
解决方案:
将其作为sql查询中的变量传递(为了更安全,可能会使用intval进行清理)