Autor Zpráva
carlosK
Profil *
Dobrý den, snažím se vytvořit skript, který bude vypisovat všechny data data z databáze. Můj výsledek je zatím takovýto:

$db = self::$result->fetch_assoc(); //funguje
foreach ($db as $klic => $hodnota)
{
$this->$klic = $hodnota;
}


Pokud ale chci vypsat data (např. $this->id), tak php vypíše jen jeden řádek dat. Děkuji
Majkl578
Profil
Tady ti asi nikdo neporadí, když nikdo neví co je self a self::$result. Můžeme pouze hádat, například, že 1. řádek nevrací pole polí/objektů.
Bertram
Profil
Ahoj, jen tipuji (tip II.), že se snažíš docílit něčeho takového.
$i = 1;
//za předpokladu, že self::$result je pole obsahující všechny řádky vrácené dotazem na databázi
while($arRow = self::$result->fetch_assoc()) {
  echo "Řádek $i<br />";
  foreach($arRow as $key => $value) {
    echo " - Sloupec '$key' má hodnotu '$value'<br />";
  }
  $i++;
}


A pokud má jít o objekt, který má v sobě načítat a ukládat určítý počet řádků z databáze, musíš jednotlivé záznamy nějak rozlišovat.
Můžeš si například vytvořit pole, kde klíčem bude nějaký identifikátor záznamu a jeho hodnota je na tobě (pole,objekt).
carlosK
Profil *
Omlouvám se za špatný popis. Ano, self::$result vrací obsah polí všech řádků z databáze. Šlo mi spíše o uložení dat z databáze do proměnné, abych je poté mohl vypisovat, ale i přesto Vám moc děkuji za odpověď.
Bertram
Profil
carlosK:
ale i přesto Vám moc děkuji za odpověď.
To zní jako nevyřešeno, takže se pokusím nastínit jednu z možných variant.

$objHandle = mysqli_connect("127.0.0.1","root","heslo","databaze");
mysqli_query($objHandle,"SET CHARACTER SET utf8");

if (!$objHandle) {
  echo "Chyba při připojování k databázi.\n";
  exit;
}
$objResult = mysqli_query($objHandle, "SELECT * FROM tabulka");
if (!$objResult) {
  echo "Chyba při zpracování dotazu.\n";
  exit;
}
while($row = mysqli_fetch_assoc($objResult)) {
  foreach ($row as $key => $value)
    {
      $zaznamy[$row['sloupec použitý jako identifikátor']][$key] = $value;
    }
  }

var_dump($zaznamy);
carlosK
Profil *
Vaše řešení mi vrací chybu na řádku 16 (Notice: Undefined index: ...). Zajímavé je ale že var_dump mi vrací jen poslední záznam z databáze.
Bertram
Profil
V příkladu se počítá s tím, že hodnota bude unikátní, aby nemohlo docházet k přepisování předešlých průchodů cyklem while.
Pokud máte sloupec id s hodnotou auto_increment zkuste:

$zaznamy[$row['id']][$key] = $value;
carlosK
Profil *
Ano, už vše funguje jak má. Ještě jednou Vám moc děkuji.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0