Stránka 1 z 1

MySQL duplikace  Vyřešeno

Napsal: 16 pro 2011 16:53
od honzaik
Čau, koupil jsem si knihu "PHP a MySQL bez předchozích znalostí". Tam jsem narazil v tématu MySQL v PHP na skript, který nám vypíše data poslaná MySQL serverem. Prostě zde je skript

Kód: Vybrat vše

<html>
<head>
<title>Zaslání SQL příkazu do databáze</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</head>
<body>
<?php
 
// Připojení k databázi.
$db_spojeni = mysqli_connect
  ('localhost', 'root', 'lokomotiva', 'test', 3306);
 
// Otestování, zda se připojení podařilo.
if ($db_spojeni)
  echo 'Připojení se podařilo';
else
{
  echo 'Připojení se nepodařilo, sorry';
  echo '<br />';
  echo 'Popis chyby: ', mysqli_connect_error();
  exit();
}
 
// Zaslání SQL příkazu do databáze.
$objekt_vysledku = mysqli_query($db_spojeni, 'SELECT * FROM osoby');
 
if (!$objekt_vysledku)
{
  echo 'Poslání SQL příkazu se nepodařilo, sorry';
  echo '<br />';
  echo 'Popis chyby: ', mysqli_error($db_spojeni);
  exit();
}
 
// Zobrazení všech vrácených dat.
echo '<pre>';
while ($radek = mysqli_fetch_array($objekt_vysledku))
  var_dump($radek);
echo '</pre>';
 
// Zavření objektu výsledku, protože už ho nebudeme používat.
mysqli_free_result($objekt_vysledku);
 
// Odpojení od databáze.
if ($db_spojeni)
  mysqli_close($db_spojeni);
 
?>
</body>
</html>


nechápu to, proč když jsem si tento skript trochu poupravil od komentáře "//Zobrazení všech vrácených dat"
takto

Kód: Vybrat vše

<?php
$mysql_connection = mysqli_connect("localhost", "root", "babolat", "test", "3306");
if ($mysql_connection == true)
{
    echo "Hell yeah <br />";
}
else
{
    echo "fail <br />";
    echo mysqli_connect_error();
}
$raw_data = mysqli_query($mysql_connection, "SELECT * FROM osoby");

echo "<pre>";
$data = mysqli_fetch_array($raw_data);
while ($radek = $data)
    echo $radek."<br />";
?>

rád bych aby mi to někdo polopatě vysvětlil přesně co se tam děje a proč mi to udělá nekonečnou smyčku, když u toho druhého ne...
poté mě také napadlo udělat činnost toho cyklu while, tak že by mi to akorát vypsalo jména, které mám mimochodem v mysql databázi v 1. sloupci takže je to $radek[0], proč tomu nejde přiřadit samostatná proměnná...
takže by to vypadlo takto

Kód: Vybrat vše

while ($radek = mysqli_fetch_array($raw_data))
    $radek[0] = $jmeno;
    echo $jmeno."<br />"; //melo by vypsat jen jmena, takze 1. sloupec

ale místo toho to napíše Undefined variable.....
takže toto bych chtěl vysvětlit, jestli by někdo měl ty nervy na to
děkuji

Re: MySQL data

Napsal: 16 pro 2011 17:03
od CZechBoY
pač všechny resource z databáze jsou true takže While jede furt dokola, nebereš odnikud data (to bys musel dát viz. kod 3)
a proč to nevypisuje jméno?
protože přiřazuješ hodnotu z "ničeho" do dat
to je stejný jako 1=$cislo, taky to nebude fungovat

Re: MySQL data

Napsal: 16 pro 2011 17:16
od honzaik
o a ted mě napadlo, že moc nechápu jak ta podmínka u while funguje.. myslim správně že pokud se má co dát do proměnné $radek tak to pojede dál? a až už nic nebude tak to teda přestane?

Re: MySQL data

Napsal: 16 pro 2011 17:20
od CZechBoY
jasně že pokud funkce MySQL_Fetch_Array (nebo jakákoliv jiná funkce) má co vracet (nevrátí int(0) nebo bool(false) nebo string(null)) tak while pokračuje

Re: MySQL duplikace

Napsal: 17 pro 2011 20:59
od honzaik
ted má ještě jeden dotaz. když si z databáze nechám vypsat data tak když mám 4sloupcovou tabulku (date, name, email, ip) tak když si to nechám vypsat pomocí toho cyklu a print_r tak jsem zjistil že to ty data posílá dvakrát ale s jinym indexem třeba

Kód: Vybrat vše

Array ( [0] => 2011-12-17 19:51:20 [date] => 2011-12-17 19:51:20

jde to nějak udělat aby to posílalo jen ty s číselnym indexem?

Re: MySQL duplikace

Napsal: 17 pro 2011 21:17
od CZechBoY
jasně
používáš funkci MySQL_Fetch_Array ta vrací oba tvary
MySQL_Fetch_Assoc vrací v klíčích jen názvy sloupců
MySLQ_Fetch_Row vrací jen číslo sloupce v tom dotazu - číslované od 0

Re: MySQL duplikace

Napsal: 17 pro 2011 21:47
od honzaik
ok díky ;)