SQL Select не работает в PHP, но работает на самом сервере MySQL - PullRequest
0 голосов
/ 15 сентября 2011

У меня есть эта функция

public function populate($id) {
    $pdo = new PDOConfig();

    $sql = "SELECT * FROM ".$this->table." WHERE `id` = :id";

    $q = $pdo->prepare($sql);
    $q->execute(array(":id"=>$id));
    $resp = $q->fetchAll();
    foreach ($resp as $row) {
        foreach ($row as $key=>$value) {
            if(!is_int($key))
                $this->$key = html_entity_decode($value, ENT_QUOTES);
            if($value == null) {
                $this->$key = null;
            }
        }
    }

    $pdo = null;
    unset($pdo);
}

Который работает. Когда я пытаюсь сделать

$sql = "SELECT * FROM ".$this->table." WHERE `id` = :id";

в

$sql = "SELECT * FROM ".$this->table." WHERE `id` = :id AND `life` > 0";

Это ломается. Когда я запускаю эту функцию в SQL внутри терминала, все работает нормально. У таблицы есть поле жизни, и запрос обязательно должен работать. Чего мне не хватает?

Спасибо

1 Ответ

3 голосов
/ 15 сентября 2011

Вы не разместили здесь ни настоящий SQL-запрос, сгенерированный вашим PHP-кодом, ни значение переменной $id. Это заставляет меня думать, что вы их не осмотрели. Поэтому, когда вы говорите «Я запускаю эту функцию в SQL в терминале, однако все работает нормально» вы, вероятно, ссылаетесь на SQL-запрос, который вы намереваетесь создать. Таким образом, проблема в том, что ваш PHP-код не отправляет запрос и значения, которые, как вы думаете, он делает.

Действия по устранению неполадок:

  1. Прямо перед $q->execute(array(":id"=>$id)); проверьте значения $sql и $id. Вы можете использовать var_dump () или предпочитаемый вами отладчик. В первом случае не доверяйте представлению вашего браузера; вместо этого используйте меню Просмотр источника .

  2. Сравните эти значения с ожидаемым результатом.

  3. Убедитесь, что ваш подкласс PDO фиксирует ошибки. Самый простой способ - специально сделать ошибку синтаксиса SQL, например XSELECT * FROM.

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