2012-08-28 86 views
1

我试图让我的LIMIT接受变量$ limit,但它不喜欢我的绑定。这是因为其他$ params是一个数组(字符串),而不是一个整数?有没有办法将$ limit指定为整数?使用PDO将变量绑定到LIMIT

public function getPhotos($limit, $status, $type, $session, $name, $inc_suite = NULL) { 
     $params = array(); 
     $sql = 'SELECT * FROM images WHERE 1=1'; 

     /** 
     * Filter by status 
     */ 
     if (!is_null($status) and $status != 'all') { 
      $sql .=' AND status = :status'; 
      $params[':status']= $status; 
     } 

     /** 
     * Filter by type 
     */ 
     if ($type !="null") { 
      $sql .=' AND type = :type'; 
      $params[':type'] = $type; 
     } 

     /** 
     * Filter by session 
     */ 
     if ($session !="null") { 
      $sql .=' AND session = :session'; 
      $params[':session'] = $session; 
     } 

     /** 
     * Filter by handle 
     */ 
     if ($name !="") { 
      $sql .=' AND handle = :name'; 
      $params[':name'] = $name; 
     } 

     /** 
     * Block Suite photos 
     */ 
     if($inc_suite != 1) { 
      $sql .= " AND type != 'suite'"; 
     } 

     /** 
     * Set order and limit the number of photos 
     */ 
     $sql .=' ORDER BY created DESC LIMIT :limit'; 
     $params[':limit'] = (int)$limit; 


     try { 
      /** 
      * Prepare the query 
      */ 
      $stmt = $this->pdo->prepare($sql); 

      /** 
      * Fire the lasers 
      */ 
      $stmt->execute($params); 

      /** 
      * Grab results 
      */ 
      $result = $stmt->fetchAll(); 
      return $result; 


     } catch(PDOException $e) { 
      $errors['database'] = $e->getMessage(); 
      return FALSE; 
     } 

    } 
+0

这已在[另一个问题](http://stackoverflow.com/questions/2269840/php-pdo-bindvalue-in-limit)中解决,其中解决方案是指导PDO更好一点。你可能需要绑定一个特定的变量,而不是直接使用'execute'。希望有人可以解释这是如何适用于你的情况作为更正式的答案。 – tadman

+0

几次回顾这个问题后,我相信这个错误出现在我的语法中,因为我正在使用简写来绑定这些变量。 $ params [':limit'] = $ limit; – jessicaldale

+0

由于某些原因,此变量不会绑定到占位符。有什么想法吗? – jessicaldale

回答

-3

你不能 - 的参数LIMITOFFSET不能绑定到一个变量,因为他们只允许是数字在SQL语法,没有表情,和变量占位符表现得像表达式。 (您可能注意到,例如,该LIMIT 1+1也不行。)

您需要将您的鼻子,插科打诨一点,内插一个值的SQL查询的限制。由于这本身就是一种棘手的事情,所以您可能需要首先通过intval()(或类似)才能确定限制值。

+0

看,不,不要只是因为*而在那里阻塞垃圾。这是没有任何借口的。有[可以修改](http://stackoverflow.com/questions/2269840/php-pdo-bindvalue-in-limit)。 – tadman

+0

duskwuff - 我最终做了这件事,直到我能弄清楚如何让LIMIT绑定。 – jessicaldale