У меня есть простая функция для сбора разрешенного массива, но что-то не так, может кто-нибудь мне помочь? Вот мой код

public function getAllbyLink($table, $what, $url)
{
   $link=mysql_real_escape_string($url);
   $query = $this->db->query("SELECT * FROM ".$table." WHERE ".$what." = '{$link}' LIMIT 0 , 1");

    if ($query->num_rows() > 0)
    {
        return $query->result();
    }
        else redirect('');
}
-2
Schneider 12 Апр 2014 в 00:49

2 ответа

Лучший ответ

Прочтите что-нибудь о шаблоне MVC, четко указан вопрос о том, как написать модель.

Рассмотрите возможность использования этой функции

public function getTable($table, $where = array(), $select = '*', $order_by = '', $limit = '', $offset = '') {

    if ($order_by !== '' && $order_by != 'RANDOM') $this->db->order_by($order_by);
    if ($order_by == 'RANDOM') $this->db->order_by('id', 'RANDOM');
    if ($limit !== '') $this->db->limit($limit, $offset);
    $this->db->select($select);
    $q = $this->db->get_where($table, $where);

    return ($q->num_rows() > 0) ? $q->result() : FALSE;

}

Для вашей цели вызовите функцию следующим образом:

getTable($talbe, array('what' => $link)); 
//returns FALSE if no data are selected, 
//or returns object with data, 

Если вы хотите вернуть массив, замените $q->result() на $q->array_result()

Обратите внимание, что активная запись сбегает автоматически.


После комментариев:

Comment-1, вы можете легко упростить эту функцию, просто удалите то, что вам не нужно, например

public function getTable2($table, $where = array(),  $limit = '', $offset = '') {

    if ($limit !== '') $this->db->limit($limit, $offset);
    $q = $this->db->get_where($table, $where);

    return ($q->num_rows() > 0) ? $q->result() : FALSE;

}

Комментарий-2, когда нет данных, используйте этот оператор if-else

if (!$my_data = getTable2('table', array('where' => $link))) {
    //there is some DATA to work with
    echo "<pre>";
    var_dump($my_data);
    echo "</pre>";

} else {
    //no DATA do redirect or tell user that there is no DATA
    redirect(); //redirect to default_controller
}

Комментарий-3, без комментариев;

Comment-4, Он также обеспечивает более безопасные запросы, поскольку значения автоматически экранируются системой. из этой источник. И еще один ТАК вопрос об активной записи, дающей точный ответ, который вы ищете.

1
Community 23 Май 2017 в 12:27

Я понимаю ваш код:

  • Прочитать все строки из таблицы
  • Проверьте, есть ли linkurl в списке
  • Если да, верните случайную строку для этого значения.
  • Иначе перенаправить.

В этом случае попробуйте следующее:

public function getAllbyLink($table,$url,$what)
{
    $query = $this->db->query("
          SELECT *
          FROM `".$table."`
          WHERE `".$what."` = '".mysql_real_escape_string($linkurl)."'
          ORDER BY RAND()
          LIMIT 1
    ");
    if( !$query) return redirect('');
    $result = $query->result();
    if( !$result) return redirect('');
    return $result;
}
0
Niet the Dark Absol 11 Апр 2014 в 21:09