我有一些简单的功能来收集允许的数组,但有些东西不行,有人可以帮帮我吗?这是我的代码
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('');
}
答案 0 :(得分: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->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;
}
comment-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,它还允许更安全的查询,因为系统会自动转义这些值。来自此source。另一个关于活跃记录的SO question提供了您正在寻找的确切答案。
答案 1 :(得分: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;
}