我想知道如何将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按用户顺序排序,但在这种情况下,我想在查询完成后订购结果行。
答案 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']);