2015-06-09 4 views
0

Я использую метод ниже для получения сообщений (я не использую SELECT *, просто написал его так же, как и для вопроса). Иногда мне нужно всего 10 сообщений, а иногда мне нужны все сообщения. Каков наилучший способ добиться чего-то подобного?Передача изменяющегося параметра методу

public function receivedMessages($user_id) { 
    if($q = $this->db->mysqli->prepare("SELECT * 
             FROM messages 
             WHERE receiver_id = ? 
             LIMIT 10")) 
    { 
     $q->bind_param("i", $user_id); 

     $q->execute(); 

     $rows = $this->helperClass->bindResults($q); 
     $q->close(); 

     return $rows; 
    } 
     return false; 
} 
+0

Попробуйте добавить параметр в метод: 'receivedMessages ($ user_id, $ limit = false)'. Если 'false' выбрать все, если число, используйте предел. – Rasclatt

+2

'public function receivedMessages ($ user_id, $ limit)' ?? –

+0

Хорошо ... Я знал, что это что-то вроде этого ... но как мне написать запрос? Я просто проверяю, является ли '$ limit' ложным и делает огромную, если иначе? Это то, что я хочу знать. – Ciprian

ответ

1

Просто используйте другой variable -

public function receivedMessages($user_id, $limit = false) { 
    $qry = "SELECT * FROM messages WHERE receiver_id = ?"; 
    if(!empty($limit)) { 
     $qry .= " LIMIT $limit"; // If limit passed then add limit statement to query 
    } 
    if($q = $this->db->mysqli->prepare($qry)) 
    { 
     $q->bind_param("i", $user_id); 

     $q->execute(); 

     $rows = $this->helperClass->bindResults($q); 
     $q->close(); 

     return $rows; 
    } 
     return false; 
} 
+0

Не должен ли '$ limit' быть' LIMIT? ', А затем '$ q-> bind_param (" i ", $ user_id, $ limit)'? – Ciprian

+0

Если вы передаете '$ limit' внутренне, тогда не нужно этого. –

+0

Ага ... так что если лимит не у пользователя, тогда все в порядке. – Ciprian

0
public function receivedMessages($user_id,$num_0f_messages) { 

if($num_of_messages === 0)){ 

//select all 
} else { 

if($q = $this->db->mysqli->prepare("SELECT * 
            FROM messages 
            WHERE receiver_id = ? 
            LIMIT ?")) 
{ 
    $q->bind_param("ii", $user_id, $num_of_messages); 

    $q->execute(); 

    $rows = $this->helperClass->bindResults($q); 
    $q->close(); 

    return $rows; 
} 
    return false; 
} 
} 

, чтобы получить все сообщения, вы receivedMessages(1,0) ; ограничить сообщения, скажем, только 5 результирующий набор, receivedMessages(1,8)

0

вы можете попробуйте это решение в соответствии с комментариями

public function receivedMessages($user_id,$limit=0) { 

if($limit==0){ 
    $sql="SELECT * FROM messages WHERE receiver_id = ?"; 
} else { 
    $sql="SELECT * FROM messages WHERE receiver_id = ? LIMIT $limit"; 
} 

if($q = $this->db->mysqli->prepare($sql)) 
    { 
     $q->bind_param("i", $user_id); 

     $q->execute(); 

     $rows = $this->helperClass->bindResults($q); 
     $q->close(); 

     return $rows; 
    } 
     return false; 
}