select语句mysql的问题

时间:2011-04-24 20:09:32

标签: php mysql database

这让我有点生气了。我在phpmyadmin中尝试这个query

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

有人能看到我在这里做错了吗?

PS。这是我的数据库连接函数,如果那件事

        $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 个答案:

答案 0 :(得分:5)

您按此顺序执行操作:

  • 准备声明
  • 绑定变量
  • 尝试从语句中获取数据
  • 执行声明

最后两个步骤应该是相反的顺序:你必须先执行语句才能获取数据 (通过执行它获得)


基本上,而不是使用这个:

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

你应该使用它:

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

答案 1 :(得分:1)

在执行之前看起来像是在抓取?