我想知道如何在php中处理MySQL请求作为对象?

时间:2011-09-01 17:18:20

标签: php mysqli

我想知道如何将php中的mysql请求正确地作为对象处理。

例如:

//supposing...
$beginning=$_GET['start'];//value equal to 3
$ending=$_GET['end'];//value equal to 17
$conn=new mysqli("localhost","user","password","databasename");
$query=$conn->query("select name, favoriteFood, weight, from tablename");

1-假设tablename有23行,如何只打印14行,例如从第3行开始到第17行结束,如下所示?

例如:

//supposing... It, I guess, should result in error but is a sketch of my ideia    
for($i=$beginning,$colsCol=$query->fetch_array(MYSQLI_ASSOC); $i<$ending; $i++)
printf("%s %s %s<\br>",$colsCol['name'][$i],$colsCol['favoriteFood'][$i],$colsCol['weight'][$i]);

2 - 之后,如何使用$ query变量对结果行进行排序?

P.S。:我知道要获得排序结果,我可以通过columname按用户顺序排序,但在这种情况下,我想在查询完成后订购结果行。

3 个答案:

答案 0 :(得分:1)

如果要稍后排序,在查询完成后,您需要将结果存储在PHP数据结构中并在那里进行排序。或者使用新的排序选项重新运行查询。

至于只获取某些行,只检索所需的行会更有效率。否则(对于大型结果集),你迫使大量数据被从磁盘上取下,通过网络发送等......只是被扔掉了。相当浪费。

但是,如果你坚持这样做:

$row = 0; $data = array();

while($row = $query->fetch_array(MYSQLI_ASSOC)) {
   $row++;
   if (($row < 3) || ($row > 17)) {
      continue;
   }
   $data[] = $row;
}

答案 1 :(得分:1)

对于2D数组,您可以使用它。


function asort2d($records, $field, $reverse=false) {
// Sort an array of arrays with text keys, like a 2d array from a table query:
  $hash = array();
  foreach($records as $key => $record) {
    $hash[$record[$field].$key] = $record;
  }
  ($reverse)? krsort($hash) : ksort($hash);
  $records = array();
  foreach($hash as $record) {
    $records []= $record;
  }
  return $records;
} // end function asort2d

答案 2 :(得分:1)

将SQL用于SQL任务:

“如何只打印14行,例如第3行并以第17行结束”

$stmt = $database->prepare('SELECT `name`, `favoriteFood`, `weight` FROM `tablename` LIMIT :from, :count');
$stmt->bindValue(':from', (int)$_GET['start'] - 1);
$stmt->bindValue(':count', (int)$_GET['end'] - (int)$_GET['start']);