在函数中传递变量

时间:2010-11-28 22:48:59

标签: php mysql database function variables

这是一个排序脚本。我想通过投票来订购我的帖子。我在函数中使用if语句来检查选择了什么顺序并根据它显示帖子。

以下函数在我的查询中插入数据。

function vote_orderby( $orderby )
{
  global $vote_sort;

  if( $vote_sort == "most_voted") {
     // order by most votes
     return "votes DESC"; //inserts into query
  }

  // return default order by if no votes
  return $orderby;
}

HTML

$vote_sort = "most_voted"; //should be picked up by function

..function
..loop

我想生成,

$query = "SELECT * FROM posts ORDER BY votes DESC";

但是帖子是按日期排序的。它可以在没有if语句的情况下工作,这可以确保我没有MYSQL错误。

如何将$vote_sort值传递给函数?

注意:我知道SQL注入风险,我会很快过滤掉所有内容。

2 个答案:

答案 0 :(得分:0)

你可能想要这样的东西:

 function vote_orderby( $orderby='most_voted' ) {  
   if( $orderby == "most_voted") {    
      // order by most votes  
      return "votes DESC"; //inserts into query  
   }  

  // return default order by if no votes  
 return $orderby;  
 }

在您的查询中,您需要与此相似的内容

// this will give you the default;
$orderby = vote_orderby();
$query = 'SELECT * FROM posts ORDER BY ' . $orderby;

// this will give you the name;
$orderby = vote_orderby('NAME DESC');
$query = 'SELECT * FROM posts ORDER BY ' . $orderby;

但您可能只想将一个变量设置为sort方法并将其传递给查询。在函数中执行此操作有点过分,或者您可以将整个查询添加到其中并返回正确的查询。

答案 1 :(得分:0)

要回答您的评论并展开迈克尔上面的解决方案,以下是您可能想要做的事情......

 function vote_orderby($orderby) {  
    switch($orderby) {
       // Sort by most votes
       case 'most_voted': $sort = 'votes DESC'; break;
       // Sort by least votes
       case 'least_voted': $sort = 'votes ASC'; break;
       // Default to most votes if does not match any other option
       default: $sort = 'votes DESC'; break;
    }
    return $sort; // Return query statement
 }

然后你的查询语句就像......

$sortby = $_GET['sort']; // However you want to get the way to sort
// If $sortby is empty, it will default to most_voted via function
$order = vote_orderby($sortby);
$query = "SELECT * FROM posts ORDER BY ".$order;

这更像是一种对系统进行编码的永久方式,可以防止人们注入您的MYSQL查询,轻微错误也不会导致未来。

过去我编写了很多类似的系统,这是最好的方法之一。