проверка на mysql_num_rows не имеет смысла.
Как бы делал я.
PHP:
<?
include 'bootstrap.php';
$pagetitle = "Инвайты";
$DATA = dbget(3,"SELECT * FROM num WHERE category=%s",$_GET['category']);
$tpl = "tpl_links.php";
include "tpl_main.php";
Вот весь код.
Как можно заметить, практически весь он здесь значимый, имеющий смысл только в контексте данной страницы. Никаких повторяющихся из кода в код, не несущих никакой полезной нагрузки функций типа prepare или fetch_array.
Весь вывод делается в tpl_links.php:
PHP:
<h2><?=$pagetitle?></h2>
<? if ($DATA): ?>
<ul>
<? foreach($DATA as $row): ?>
<li><a href="<?=$row['link']?>" target="_blank"><?=$row['name']?></a></li>
<? endforeach ?>
<ul>
<? elseif: ?>
Пока ничего нет
<? endif ?>
В файле bootstrap.php подключаются настройки, часто используемые функции, происходит коннект к БД.
В частности, функция dbget, которая, хоть и неказиста с виду, но даст сто очков вперёд голой PDO.
PHP:
function dbget() {
/*
usage: dbget($mode, $query, $param1, $param2,...);
$mode - "dimension" of result:
0 - resource
1 - scalar
2 - row
3 - array of rows
*/
$args = func_get_args();
if (count($args) < 2) {
trigger_error("dbget: too few arguments");
return false;
}
$mode = array_shift($args);
$query = array_shift($args);
$query = str_replace("%s","'%s'",$query);
foreach ($args as $key => $val) {
$args[$key] = mysql_real_escape_string($val);
}
$query = vsprintf($query, $args);
if (!$query) return false;
$res = mysql_query($query);
if (!$res) {
trigger_error("dbget: ".mysql_error()." in ".$query);
return false;
}
if ($mode === 0) return $res;
if ($mode === 1) {
if ($row = mysql_fetch_row($res)) return $row[0];
else return NULL;
}
$a = array();
if ($mode === 2) {
if ($row = mysql_fetch_assoc($res)) return $row;
}
if ($mode === 3) {
while($row = mysql_fetch_assoc($res)) $a[]=$row;
}
return $a;
При этом если делать её классом, то получится в сто раз удобнее и мощнее.
К вопросу о том, зачем писать "классами".
Как можно увидеть, весь код очень простой, никаких супер-наворотов. Всё довольно логично и привычно.
Но при этом соблюдаются все базовые принципы постройки приложения.
Это, в принципе, конечно тоже ужас, но хотя бы осмыленный. Такой "идеальный говнокод".