Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Количество возвращённых записей
 
 автор: Le-mers   (04.09.2006 в 11:41)   письмо автору
 
 

Я вообще то новичок. Пытаюсь разобраться с классами, но не все понятно, может вы подскажете. С помощью класса формирую запрос к БД.
class Mysql_db
{
var $_fields;
var $expr;
var $sql;
var $result=array();
function __construct($params) {
if(is_array($params['fields'])) $this->_fields=join(",",$params['fields']);
else $this->_fields=$params['fields'];
if(isset($params['condit'])) $this->expr=" where ".$params['condit'];
if(isset($params['order'])) $this->expr.=" order by ";
if(is_array($params['order'])) $this->expr.=join(",",$params['order']);
else $this->expr.=$params['order'];
if(isset($params['group'])) $this->expr.=" group by ".$params['group'];
if(isset($params['limit'])) $this->expr.=" limit ".join(",",$params['limit']);
//формирование запроса
$this->sql="select ".$this->_fields." from ".$params['table'].$this->expr;
return mysql_select_db(MYSQLDBASE,(mysql_connect(MYSQLHOST,MYSQLUSER,MYSQLPASSWORD)));
}
function query(){
mysql_query ('SET NAMES cp1251'); //даем знать что бд на русском
$res=mysql_query($this->sql);
if(strstr($this->sql,"select")){
switch(1){
case strstr($sql,"count"):
return mysql_result($res,0);
break;
default:
while($_res=mysql_fetch_object($res))
{ $result[ ]=$_res;}
return $result;
}}}}
Потом делаю запрос на подсчет строк, а он возврвщает массив а не число
$params=array("fields"=>"count(*)","table"=>"fotogallery","group"=>"title");
$cnt=new Mysql_db($params);
$ll=$cnt->query();

   
 
 автор: cheops   (04.09.2006 в 12:45)   письмо автору
 
   для: Le-mers   (04.09.2006 в 11:41)
 

Да, всё правильно, вы формируете массив
<?php
while($_res=mysql_fetch_object($res))
$result[ ]=$_res;}
return 
$result;
?>

и возвращаете его, для того, чтобы узнать количество элементов в массиве следует использовать функцию count().
<?php
while($_res=mysql_fetch_object($res))
$result[ ]=$_res;}
return 
count($result);
?>

   
 
 автор: Le-mers   (04.09.2006 в 13:08)   письмо автору
 
   для: cheops   (04.09.2006 в 12:45)
 

Еще вопрос. Насколько я понимая функция mysql_fetch_object() возвращает массив об'ектов. Как мне получить определенный об'ект? (в простом массиве это выглядело так: $tit=$title[$sw_field]['title'];)

   
 
 автор: Trianon   (04.09.2006 в 13:17)   письмо автору
 
   для: Le-mers   (04.09.2006 в 13:08)
 

$tit=$title[$sw_field]->title;

   
 
 автор: cheops   (04.09.2006 в 13:21)   письмо автору
 
   для: Le-mers   (04.09.2006 в 13:08)
 

Элемент массива является объектом, далее вы с ним можете поступать как с обычны объектом.

   
 
 автор: Trianon   (04.09.2006 в 13:16)   письмо автору
 
   для: Le-mers   (04.09.2006 в 11:41)
 

Вот этот кусок

    function query(){
        mysql_query ('SET NAMES cp1251'); //даем знать что бд на русском
        $res=mysql_query($this->sql);
        if(strstr($this->sql,"select")){
            switch(1){
               case strstr($sql,"count"):
                  return mysql_result($res,0);
                  break;
               default:
                  while($_res=mysql_fetch_object($res))
                  {  $result[ ]=$_res;}
                  return $result;
            }}}}

попробуйте переписать так:

function query()
{
  mysql_query ('SET NAMES cp1251'); //даем знать что бд на русском
  $res=mysql_query($this->sql);
  if(stripos($this->sql,"select ") === 0)
  {
      if(stripos($this->sql,"select count(") === 0)
          return mysql_result($res,0);
      while($_res=mysql_fetch_object($res))
         $result[ ]=$_res;
      return $result;
  }
}

Между прочим. SET NAMES имеет смысл делать один раз. После mysql_connect

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования