проблема с оператором select mysql - PullRequest
0 голосов
/ 25 апреля 2011

Это раздражало меня на некоторое время. Я пытаюсь это query в phpmyadmin.

select `id` from `users` where `fb_id` = 507292797 limit 1

Возвращает значение 13, поэтому почему это не работает:

                $sql =  "select `id` from `users` " .
                        "where `fb_id` = :fb_id " .
                        "limit 1";
                try 
                {
                    $stmt = $this->db->prepare($sql); 
                    $stmt->bindParam(':fb_id', $fb_id2, PDO::PARAM_INT);

                    $user = $stmt->fetch(PDO::FETCH_ASSOC); 
                    $result = $stmt->execute();

                    $stmt->closeCursor(); 
                }       
                catch (Exception $e)
                {
                die ($e->getMessage() ); 
                }

                echo "id: " . $fb_id2 . " var_dump: " . var_dump($user); 
                exit(); 

Возвращает:

id: 507292797 var_dump: bool(false)

Когда var_dump должен вернуть $user['id'] = 13

Может кто-нибудь увидеть, что я здесь делаю неправильно?

пс. вот моя функция подключения БД, если это имеет значение

        $dsn = "mysql:host=" . DB_HOST . ";dbname=" . DB_NAME;
        $driver_options = array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8' );

        try
        {
            $this->db = new PDO($dsn, DB_USER, DB_PASS, $driver_options);

Ответы [ 2 ]

5 голосов
/ 25 апреля 2011

Вы делаете вещи в следующем порядке:

  • Подготовка оператора
  • Привязка переменных
  • Попытка получить данные из оператора
  • Выполнение оператора

Два последних шага должны быть в обратном порядке: Вы должны выполнить инструкцию, прежде чем сможете получить данные (получаемые при его выполнении).


По сути, вместо этого:

// fetch, then execute ???
$user = $stmt->fetch(PDO::FETCH_ASSOC); 
$result = $stmt->execute();

Вы должны использовать это:

// Execute, **then** fetch
$stmt->execute();
$user = $stmt->fetch(PDO::FETCH_ASSOC); 
1 голос
/ 25 апреля 2011

Похоже, что вы берете перед выполнением?

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