我开始构建一个我将用于我的应用程序的小PDO包装器。但是,当我开始编码时,我遇到了一个似乎无法解决的问题。
我遇到的问题是PDOStatement的execute()返回false,我不知道值绑定或执行是否有问题。我已经测试了查询(无论如何非常简单)并且它工作正常。与服务器的连接也正常。
希望你能帮忙!这是我的代码:
<?php
class DataBase {
private $PDO;
private static $instancia;
public static function getInstance() {
if (!self::$instancia instanceof self) {
self::$instancia = new self;
}
return self::$instancia;
}
function __construct() {
$configuracion = Configuracion::getInstance();
// echo "mysql:host={$configuracion->dbHost};dbname=mysql", $configuracion->dbUser, $configuracion->dbPassword;
try {
$this->PDO = new PDO("mysql:host={$configuracion->dbHost};dbname=mysql", $configuracion->dbUser, $configuracion->dbPassword);
debug("conectado a la db", __FILE__, __LINE__);
} catch (PDOException $e) {
debug($e->getMessage(), __FILE__, __LINE__);
}
}
function selectDistanceFromDistances($a, $b) {
$sentencia = $this->PDO->prepare('SELECT distance FROM distances WHERE a = ? AND b = ?;');
// debug($sentencia->execute(array($a, $b)));
$sentencia->bindValue(1, 15, PDO::PARAM_INT);
$sentencia->execute();
$this->PDO->errorInfo();
$resultado = $sentencia->fetchAll();
return $resultado;
}
}
?>
谢谢!
答案 0 :(得分:4)
$sentencia->execute();
$this->PDO->errorInfo();
您正在执行,然后询问错误信息,但您实际上并没有对错误信息做任何事情!你似乎有一个调试功能,所以在这里使用似乎是一个好主意。
您的查询有两个占位符,但您只绑定了其中一个占位符,所以这可能就是错误。
您可能需要考虑turning on exceptions mode并使用try / catch。默认情况下,PDO在构造函数之外是 silent 。