2014-04-11 37 views
-2

我有一些簡單的函數來收集允許的數組,但有些東西不好,有人可以幫我嗎?這裏是我的代碼在PHP中製作簡單的允許數組? (CodeIgniter)

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

請具體說明什麼不是「好」。 – ethan

+0

返回空數組 – Schneider

回答

1

請閱讀一些關於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->array_result()

更換$q->result()請注意,活動記錄自動逃脫。


後評論:

評論-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 
} 

comment-3,no comment;

comment-4,它還允許更安全的查詢,因爲系統會自動轉義這些值。從此source。另一個關於活躍記錄的SO question提供您正在尋找的確切答案。

+0

好的,這是最受歡迎的模型,txansk,告訴我只有一件事,如果有錯誤將會發生什麼$什麼 – Schneider

+0

您可以播種我的例子,我可以把我所構建的東西,以及在沒有數據時重定向,提前txanks – Schneider

+0

順便說一句問題不是關於這一點,它是從表\ – Schneider

0

我你的代碼的理解是:

  • 讀取所有的行從表
  • 檢查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

沒有返回錯誤 – Schneider

+0

考慮你的答案對與錯,OP使用CodeIgniter並應使用[活動記錄](http://ellislab.com/codeigniter/user-guide/database/active_record.html)。 – Kyslik

+0

只是順便說一句:你爲​​什麼使用'ORDER BY RAND()'比沒有它運行它快嗎?還是它是一個錯字?謝謝。 – Kyslik