Не могу найти, что не так с PDOStatement :: Execute = / - PullRequest
1 голос
/ 25 марта 2011

Я начинаю создавать небольшую оболочку PDO, которую я буду использовать для своего приложения. Однако, когда я начал кодировать, я столкнулся с проблемой, которую не могу решить.

Проблема, с которой я столкнулся, заключается в том, что метод execute () в PDOStatement возвращает 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;
    }

}

?>

Спасибо!

1 Ответ

4 голосов
/ 25 марта 2011
    $sentencia->execute();
    $this->PDO->errorInfo();

Вы выполняете, а затем запрашиваете информацию об ошибке, но на самом деле вы ничего не делаете с информацией об ошибке! Похоже, у вас есть функция отладки, так что это хорошая идея для использования здесь.

В вашем запросе два заполнителя, но вы связали только один из них, так что, вероятно, в этом и заключается ошибка.

Возможно, вы захотите включить режим исключений и использовать try / catch. По умолчанию PDO тихий , вне конструктора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...