SQL语法没有任何错误,但它有一些错误,感觉它没有插入SQL中。
function getAllStudentsDetails($param){
$sql = "SELECT * FROM students LIMIT ?,?";
$data = Db::query($sql,$param);
return Db::fetchObject($data);
}
如果我只是输入
,这段代码会返回值 $sql = "SELECT * FROM students LIMIT $param[0],$param[1];
我在这里做错了吗?顺便说一下Db::query($sql,$param);
返回所有其他函数的值。
自定义功能:
static function query($sql, $values=null) {
$stmt = self::$conn->prepare($sql);
$stmt->execute($values);
return $stmt;
}
static function fetchObject($result) {
if ($result) {
$result = $result->fetchAll(PDO::FETCH_OBJ);
}else{
$result = "Error in fetching Object the sql returned false";
}
return $result;
}
更新
我试图找出问题,似乎LIMIT ?,?
中的值无论您如何通过直接string
或execute
方法传递为bind
两者都返回字符串作为它的类型。错误消息显示' 0'' 10'作为PDO正在放置的值。似乎PDO通过prepare方法将我的int转义为字符串。
更新2
在mysql中输入sql时,我对上面更新中的prepare函数的猜测确实是正确的
SELECT * FROM `students` WHERE 1 LIMIT '10','10'
将错误返回为
1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以获得正确的语法
near'' 10'' 10''在第1行
这确实是PHP返回的错误。准备方法的方法是这样做的原因。它似乎引用了所有内容,以便将值放入数据库中以防止SQL注入。