Проблем с цикъл

  • Автор Автор niker
  • Начална дата Начална дата

niker

Registered
PHP:
class Database {

	private $host;
	private $username;
	private $password;
	private $database;
	
	private static $instance = null;
	
	private $connect;
	private $query;
	
	private function __construct() {}
	private function __clone() {}
	
	public static function getInstance()
	{
		if(self::$instance == null)
		{
			return self::$instance = new Database();
		}
	}
	
	public function connect($host, $username, $password, $database)
	{
		$this->connect = mysqli_connect($host, $username, $password);
		mysqli_select_db($this->connect, $database);
		if($this->connect === FALSE)
		{
			throw new Exception('Error: Cannot connect to MySQL');
		}
		return TRUE;
	}

	public function clear($variable)
	{
		$variable = mysqli_real_escape_string($this->connect,$variable);
		return $variable;
	}

	public function Execute($sql)
	{
		$this->query = mysqli_query($this->connect,$sql);
		if($this->query === FALSE)
		{
			throw new Exception('Query Error: ' . mysqli_error($this->connect));
		}
			return $this->query;
	}
	
	public function FetchArray($sql)
	{
		return mysqli_fetch_array($this->Execute($sql));
	}
	
	public function numRows($sql)
	{
		return mysqli_num_rows($this->Execute($sql));
		mysqli_free_result($this->query);
	}
	
	public function FetchRow($sql)
	{
		return mysqli_fetch_row($this->Execute($sql));
	}
	
	public function __destruct()
	{
		mysqli_close($this->connect);
	}
}

PHP:
try {
$db = Database::getInstance();
$db->connect('localhost', 'root', 'пас', 'дб');
$db->Execute('SET NAMES utf8');
$db->Execute('SET CHARACTER SET utf8');
}
catch(Exception $e) {
echo $e->getMessage();
}



while($row = $db->FetchArray("SELECT * FROM `users` ORDER by userRating DESK LIMIT 0 , 50")) {
echo $row['id'];
}
Като остая
while праи милярди заявки докато не ми крашне браузара.
С фор пробвах ама изкарва едни и същи стойности.
Пробвах и с форич и пак неще. Някакви идеи ?
 
Грешно си констроирал нещата.
while(....) се изпълнява безкрайно много пъти.
За туй решението е :
$var = $db->FetchArray("SELECT * FROM `users` ORDER by userRating DESK LIMIT 0 , 50");

foreach($var as $row) { print_r($row); }

Foreach ще ти сърши перфектна работа тъй като обикаля всеки един елемент.
While ще се върти докато в условието му не стане нешо false;
Пример за while ..


$acceptConnetions = true;

while($acceptConnections) { $this->server->aceptConnection();
if($this->server->coneection == 10 ) { $acceptConnections = false ; }
}
 
Пробвах го да го еба и с форич.

Обаче ми изкарва да речем 50 резултата с няква стойност "Е".
И то изобщо не ги изкарва правилно.
 
public function FetchArray($sql)
{
return mysqli_fetch_array($this->Execute($sql),MYSQLI_ASSOC);
}


След което пак пробвай кода който по-горе ти дадох.
Ако ли не дай просто един print_r( на $var )
 
с принт–р ми връща всичко ОК,
Обаче като изкарам:

$row['title'] да речем и не изкарва квото тряя
 
А и ми вади само 1 резултат а те примерно са 2.

Връща иамм предвид 2 резултата но със едно и също съдържание.

Едит:
Като ползвам варианта с МУСЯЛ–АСОК. Връща 1 резултат.
 
niker каза:
А и ми вади само 1 резултат а те примерно са 2.

Връща иамм предвид 2 резултата но със едно и също съдържание.
Би ли ми дал кода на страница си. Нещо май не успявам да схвана точно како си писал.
 
Това DESK хич не ми вдъхва доверие, но може би DESC.

И @index не си прав относно while. Така или иначе той трябва да се върти докато има резултати във върнатия масив.
 
Това DESK хич не ми вдъхва доверие, но може би DESC.

И @index не си прав относно while. Така или иначе той трябва да се върти докато има резултати във върнатия масив.
 

Back
Горе