Posiadam klasę:
<?php
/**
* Klasa obsługi bazy danych mysql
*
* @author Michał (Foxbond) Ch. <foxbond at gmail dot com >
* @copyright 2010 Michał Ch.
* @version 0.0.3 PRE-ALPHA
* @access public
* @license All rights reserved! NOT COPY!
* @package *** *****
*/
class fox_db {
/**
* Dane do połączenia (użytkownik, pass, host, prefix itp.)
*
*
*/
/**
* objekt połączenia (wynik mysql_connect() )
*
*
*/
private $_l;
/**
* True/False w zależności czy połączenie jest aktywne
*
*
*/
protected $_connected = false;
/**
* Zawiera wynik ostatniego zapytania
*
*
*/
public $last_query;
public function __construct ($pass, $start=true)
{
{
throw new fox_db_exception('Dane do połączenia z bazą nie są tablicą!');
}
{
throw new fox_db_exception('Info startu nie jest Boolean [ten comment trzeba zmienić]');
}
$this->info = $pass;
if($start === true) { $this->connect(false); }
}
public function connect($czyy=false, $set_names=true, $dane)
{
if($czyy === false && is_array($dane)) { $log = $dane; } else { $log = $this->info; }
if(!$link) { throw new fox_db_exception('Błąd przy połączeniu z bazą!'); }
if(!mysql_select_db($log['db_name'])) { throw
new fox_db_exception
('Błąd przy wyborze bazy danych!'); } if($set_names === true)
{
}
$this->_l = $link;
$this->_connected = true;
return $link;
}
public function query($query, $table)
{
$query = str_replace('{[table]}', $this->info['prefix'].$table, $query); if(!$result) { throw
new fox_db_exception
('Zapytanie nie powiodło się! {{{'.mysql_error().'}}}'); } $this->last_query = $result;
return $result;
}
public function fetch_array($param1=false, $param2=false)
{
//if(!$result) { throw new fox_db_exception('Zapytanie nie powiodło się! {{{'.mysql_error.'}}}'); }
return $result;
}
public function fetch_row($param1=false, $param2=false)
{
if(!$result) { throw
new fox_db_exception
('Zapytanie nie powiodło się! {{{'.mysql_error.'}}}'); } return $result;
}
public function fetch_assoc($param1=false, $param2=false)
{
//if(!$result) { throw new fox_db_exception('Zapytanie nie powiodło się! {{{'.mysql_error.'}}}'); }
return $result;
}
/**
* Odpowiednik funkcji mysql_num_rows
*
* @param string|resource|boolean $param1 - Parametr 1
* @param string $param2 - parametr 2
* @return array
*/
public function num_rows($param1=false, $param2=false)
{
//if(!$result) { throw new fox_db_exception('Zapytanie nie powiodło się! {{{'.mysql_error.'}}}'); }
return $result;
}
/**
* Ta funkcja może sprawiać problemy w zrozumieniu. Całe zapytanie wygląda tak: SELECT COUNT(*) FROM $table WHERE $after_where
*
* @example $db->count_rows('id>0 AND id<300', users);
* @param string $after_where - Co ma być w zapytaniu po where
* @param string $table - Nazwa tabeli na której ma być wykonywana operacja
* @return integer
*/
public function count_rows($after_where, $table)
{
$query = 'SELECT COUNT(*) FROM {[table]} WHERE ';
$query = str_replace('{[table]}', $this->info['prefix'].$table, $query); $query .= $after_where;
if(!$result) { throw
new fox_db_exception
('Zapytanie nie powiodło się! {{{'.mysql_error().'}}}'); } //if(!$result) { throw new fox_db_exception('Zapytanie nie powiodło się! {{{'.mysql_error().'}}}'); }
$result = $result[0];
return $result;
}
public function is_connected() { return $this->_connected; }
public function disconnect()
{
if(!mysql_close($this->_l
)) { throw
new fox_db_exception
('Nie można zamknąć połączenia z bazą danych!'); } $this->_connected = false;
}
public function __destruct()
{
if ($this->_connected === true)
{
$this->disconnect();
}
}
}
class fox_db_exception extends exception {};
?>
I przykładowy skrypt:
<?php
require_once('core.php');
while($p = $db->fetch_assoc("SELECT * FROM {[table]} WHERE id > 0", "tabelka1")
{
echo $p['nazwa'].$p['ile']; }
Skrypt zapętla się wciąż zwracając pierwszy wynik.
Jednak gdy zrobię tak:
<?php
require_once('core.php');
$q = $db->query("SELECT * FROM {[table]} WHERE id > 0", "tabelka1");
while($p = $db->fetch_assoc(false))
{
echo $p['nazwa'].$p['ile']; }
wszystko jest w porządku. Takie rozwiązanie mnie nie zadowala, ponieważ w takim wypadku wygodniej jest dać mysql_query i mysql_fetch_assoc .
Proszę nie zwracać uwagi na literówki, ponieważ piszę to z pamięci, gdyż nie mam laptopa ze skryptami przy sobie.