我有一个函数,它查询mysql数据库的某些内容,并获得一个空数组。我知道搜索查询是正确的,我不明白的是为什么我的代码返回一个空数组。在运行此代码时,我没有错误。
我的代码如下:
public $results;
public function __construct () {
require_once'app/model/DB_Con.php';
$this->db = new connection();
$this->db = $this->db->dbConnection();
}
public function _search ($data) {
$this->query = $this->db->prepare("SELECT * FROM students WHERE name LIKE '%?%'");
$this->query->bindParam(1, $data);
$this->query->execute();
$this->results = $this->query->fetchAll();
print_r($this->results);
echo $data;
}
有没有办法对PHP PDO进行故障排除,因为我没有看到mysql错误(如果有的话)。
感谢。
答案 0 :(得分:2)
PDO有几种处理错误的方法,以及查询结果。
对于错误,您可以将选项用于PDO :: __结构,例如
new PDO($dsn, $user, $pwd, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
显然,取代你的$ dsn,$ user,$ pwd。
使用这样的构造,每个PDO错误都会抛出异常,这可能是处理错误的最佳方法。
在您的情况下,错误可能是您查询失败。如果使用bind to ... bind paramters,则必须确保参数尚未转义。在这里,通过在查询中使用like '%?%'
,PDO将注入变量并保护它,并且您的查询将失败。
您必须为like ?
更改它,然后绑定您添加%的参数,例如$this->query->bindParam(1, '%'.$data.'%');
。
编辑:有关配置选项的更多信息:http://php.net/manual/fr/pdo.setattribute.php