Autor | Zpráva | ||
---|---|---|---|
kikinet Profil |
#1 · Zasláno: 31. 3. 2014, 19:16:41
Zdravím,
mám klasický jednoduchý dotaz pro získání informací z db. Tento funguje v pořádku $query = "SELECT `url_orig`,`url_thumb` FROM `group` WHERE `ID_g`=".$group.";"; $result = mysql_query($query, $db); $url[] = mysql_fetch_assoc($result); $query = "SELECT `name_p` FROM `photos` WHERE `group_ID`=".$group.";"; $result = mysql_query($query, $db); $photos[] = mysql_fetch_assoc($result); |
||
Fisir Profil |
#2 · Zasláno: 31. 3. 2014, 19:39:55
Reaguji na kikineta:
Kolik řádků vrací SQL dotaz spuštěný v nějakém adminovi? Můžeš si zkusit vypsat mysql_num_rows($result); , schválně, kolik ti to vrátí. PHP rozšíření mysql_* je zastaralé, příště použij raději MySQLi.
|
||
Micruss Profil |
#3 · Zasláno: 31. 3. 2014, 19:40:59
$photos = array(); while($photo = mysql_fetch_assoc($result)) { $photos[] = $photo; } když jich chceš získat víc než 1 |
||
kikinet Profil |
#4 · Zasláno: 31. 3. 2014, 22:47:24
Fisir:
Vím, že novější je novější je MySQLi. Celý web mi jede na MySQL a nebudu to předělávat kvůli jednomu dotazu, který nefunguje Micruss: To už jsem taky zkoušela, marně. Pořád vrací jen jeden výsledek (místo 3 požadovaných) |
||
Tori Profil |
#5 · Zasláno: 31. 3. 2014, 22:54:02
kikinet:
Je potřeba přesněji určit, kde vlastně je chyba - jestli v dotazu/datech, nebo ve skriptu. Nejjednodušší způsob radil Fisir [#2]: Když si spustíš samotný dotaz v PhpMyAdmin, měl by vracet ty tři řádky. Pokud ne, chyba je v dotazu nebo v datech; v opačném případě je ve skriptu. |
||
peta Profil |
Nevidim tam povolene
error_reporting() .
Nevidim tam u dotazu or die mysql_error() . Ale dotaz projde, kdyz vrati 1 radek.
Nevidim tam echo $query; , ktere by pak stacilo zkopirovat do phpmyadmina.
Muj predpoklad je, ze kdyz to vrati 1 radek a ne 3, tak zhlediska sql je dotaz spravny, funkcni. Ale zhlediska pozadavku na 3 radky je chybne sestaveny, tudiz nemuze 3 radky vracet. Proc? Je mozne, ze promenna $group neni definovana (pak tam vlozi prazdnou hodnotu nebo selze dotaz). Je mozne, ze v db v tom sloupci jsou jine hodnoty group_ID nez v $group. 1) $query = "SELECT `url_orig`,`url_thumb` FROM `group` WHERE `ID_g`=".$group.";";
2) $query = "SELECT `name_p` FROM `photos` WHERE `group_ID`=".$group.";";
Ty dva dotazy jsou rozdilne, nemusi vracet stejny pocet radku. (1) pracuje s tabulkou group, (2) s tabulkou photos. Ja bych si zkusil zobrazit obe tabulky, cele a zameril se na hodnoty v ID_g a group_ID. SELECT * FROM `group` SELECT * FROM `photos` |
||
kikinet Profil |
#7 · Zasláno: 1. 4. 2014, 14:35:21
Tori:
Vrací 3 řádky pokud to vložím do admina :) takže je to spíše z hlediska scriptu peta: Error_reporting je povoleno - nehlásí nic V $group je určitě zadaná správná hodnota (od 1 do 4), vypisuju ji pro kontrolu společně s polem $photos Samotný dotaz v phpMyAdmin je funkční a vrací 3 řádky ID_g a goup_ID mají stejný datový typ (int(1)). ID_g je ID tabulky group a group_ID je cizí klíč v tabulce photos |
||
Kajman Profil |
#8 · Zasláno: 1. 4. 2014, 14:49:44
kikinet:
Když pole naplníte podle [#3], jak s ním pak pracujete? Třeba bude chyba i tam. |
||
peta Profil |
Kdyz ten dotaz, udelas echo a to, co echo vypise, das do phpmyadmina, tak ti zobrazi 3 radky, ano? Pak je dotaz v poradku.
Pokud pouzijes (tvuj kod) $query = "SELECT `name_p` FROM `photos` WHERE `group_ID`=".$group.";"; $result = mysql_query($query, $db); $photos[] = mysql_fetch_assoc($result); // 1x fetch vytahne z $result pouze jeden radek http://cz2.php.net/mysql_fetch_assoc $result = mysql_query($sql); if (!$result) { echo "Could not successfully run query ($sql) from DB: " . mysql_error(); exit; } if (mysql_num_rows($result) == 0) { echo "No rows found, nothing to print so am exiting"; exit; } // While a row of data exists, put that row in $row as an associative array // Note: If you're expecting just one row, no need to use a loop // Note: If you put extract($row); inside the following loop, you'll // then create $userid, $fullname, and $userstatus while ($row = mysql_fetch_assoc($result)) { echo $row["userid"]; echo $row["fullname"]; echo $row["userstatus"]; } |
||
kikinet Profil |
#10 · Zasláno: 1. 4. 2014, 22:32:56
Kajman:
Potom uz ho jen vypisuju pomoci print_r($photos) , coz mi vrati jeden radek.
peta: Ano, teorii chapu. Snazim se hodnoty nahrat z db do pole pres cyklus while tak, jako to psal [#3] Micruss. Ale take vraci pouze jeden radek. A ano, dotaz samotny je funkcni |
||
Kajman Profil |
#11 · Zasláno: 1. 4. 2014, 22:38:54
kikinet:
Ukažte současný kód s while cyklem od dotazu až po výpis. |
||
kikinet Profil |
#12 · Zasláno: 2. 4. 2014, 19:17:53 · Upravil/a: Moderátor (editace znemožněna) 2. 4. 2014, 21:24:54
Kajman:
if ($group>0 && $group<5){ //ošetření špatně zadaných hodnot do url require('script/dblogin.php'); //přihlášení k db $query = "SELECT `name_p` FROM `photos` WHERE `group_ID`=".$group.";"; //získání názvů fotek podle zvolené kategorie $result = mysql_query($query, $db); $photos = array(); while($photo = mysql_fetch_assoc($result)) { $photos[] = $photo; }; print_r($photos); }; |
||
peta Profil |
<?php $SQL = array(); $SQL['host'] = "localhost"; //server (host) $SQL['user'] = "root"; //MySQL user $SQL['psw'] = ""; //MySQL password $SQL['dbname'] = "test"; //MySQL DB name $SQL['connect'] = mysql_connect($SQL['host'],$SQL['user'],$SQL['psw']) or die(mysql_error()); $SQL['db'] = mysql_select_db($SQL['dbname'],$SQL['connect']) or die(mysql_error()); $group = 3; if ($group>0 && $group<5){ //ošetření špatně zadaných hodnot do url // require('script/dblogin.php'); //přihlášení k db $query = "SELECT `name_p` FROM `photos` WHERE `group_ID`=".$group.";"; //získání názvů fotek podle zvolené kategorie echo '<hr>'.$query.'<hr>'; $result = mysql_query($query) or die(mysql_error()); $photos = array(); while($photo = mysql_fetch_assoc($result)) { $photos[] = $photo; }; echo '<pre>'; print_r($photos); }; /* CREATE TABLE `test`.`photos` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `name_p` TEXT NOT NULL , `group_ID` INT NOT NULL , INDEX ( `group_ID` ) ) ENGINE = MYISAM ; INSERT INTO `test`.`photos` ( `id` , `name_p` , `group_ID` ) VALUES ( NULL , 'aaa', '3' ), ( NULL , 'bbb', '3' ); INSERT INTO `test`.`photos` ( `id` , `name_p` , `group_ID` ) VALUES ( NULL , 'ccc', '2' ), ( '', 'ddd', '3' ); */ ?> Vypise to spravne, cili netusim, kde mas chybu. Bud spatna hodnota v $group nebo v databazi group_ID. Nemas treba v db group_ID jako string? ' 3' je neco jineho jako '3'. Pro jistotu jsem pridal ke kodu i strukturu tabulek a data, ktera jsem tam vlozil. SELECT `name_p` FROM `photos` WHERE `group_ID`=3; Array ( [0] => Array ( [name_p] => aaa ) [1] => Array ( [name_p] => bbb ) [2] => Array ( [name_p] => ddd ) ) |
||
Časová prodleva: 10 let
|
0