| 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: 12 let
|
|||
0