Avatar billede djthomas Nybegynder
22. november 2004 - 12:58 Der er 14 kommentarer og
1 løsning

Hvorfor henter den kun 1 row?

Hvorfor henter min query kun en row her selv om der er 2 i tabelen?

min query ser således ud:

'"SELECT
                                    0,
                                    picture
                                FROM
                                    ".$this->images_table."
                                WHERE
                                    page_id = ".$page_id'


Min db ser således ud:

CREATE TABLE `minTabel` (
  `id` int(11) NOT NULL auto_increment,
  `page_id` int(11) NOT NULL default '0',
  `picture` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`)
)
Avatar billede jakobclausen Nybegynder
22. november 2004 - 13:02 #1
Prøv med:

'"SELECT picture FROM ".$this->images_table." WHERE page_id = ".$page_id'
Avatar billede djthomas Nybegynder
22. november 2004 - 13:08 #2
Så henter den stadig kun 1 row
Avatar billede medions Nybegynder
22. november 2004 - 13:22 #3
Husker du at løbe din kode igennem med et loop så den udskriver det hele hvis der er flere resultater?

//>Rune
Avatar billede djthomas Nybegynder
22. november 2004 - 14:02 #4
jeg har sagt:

function get_images( $page_id ){
        $result = mysql_query("SELECT
                                    picture
                                FROM
                                    ".$this->images_table."
                                WHERE
                                    page_id = ".$page_id);
        if( $result ){
            return $result;
        }
    }

$images = mysql_fetch_row( $this->get_images( $page_id ) );
               
        var_dump( $images );

og i min var_dump i php kan jeg se at der kun er 1 row :-(
Avatar billede 20 Nybegynder
22. november 2004 - 14:03 #5
Prøv at udskriv din variabler, og se om de fungér.
Avatar billede arne_v Ekspert
22. november 2004 - 14:21 #6
Mangler der ikke en while løkke til at hente flere rows ?
Avatar billede djthomas Nybegynder
22. november 2004 - 14:28 #7
Nej det mener jeg da ikke min sql burde da hente alt med page_id = $page_id, burde den ikke og så skal jeg bruge en whileløkke til at loppe mine rows ud ikke? men mit sql opslag henter simpelthen ikke mere en end row desværre, det er det der undre mig!

Men skal vel ikke lave en speciel indstilling i sin tabel for at kunne sige WHERE nogen = noget i et felt vel?
Avatar billede arne_v Ekspert
22. november 2004 - 14:53 #8
Den SQL SELECT henter alle rows.

Men derfor skal du stadig have en while løkke i PHP til at hente
de enkelte rows ud af resultatet (jeg er ikke vildt PHP kyndig
men det plejer jeg at gøre - og man skal ihvertfald i alle mulige
andre sprog).
Avatar billede jaw Nybegynder
22. november 2004 - 14:56 #9
Jow, jeg tror nu også du mangler noget. Nu er jeg ikke helt skarp i klasser, men hvis vi tager udgangspunkt i at du får returneret $result.

while($images = mysql_fetch_row($result)) {
  echo $images[felt];
}
Avatar billede jaw Nybegynder
22. november 2004 - 14:59 #10
Oh, måske det alligevel burde virke sådan som du har det. Har du prøvet mysql_fetch_array i stedet for _row?
Avatar billede djthomas Nybegynder
22. november 2004 - 15:14 #11
Nej det skulle ikke ha noget at sige. mysql_fetch_array er overkill, Det er 2 functioner i samme function man kan "dele" _array op i 2 forskellige, nemli mysql_fetch_row og mysql_fetch_assoc.

_row, henter kun tal i et array, _asooc henter de associative værdier.
Avatar billede jaw Nybegynder
22. november 2004 - 15:34 #12
Ved jeg godt, men jeg synes jeg før har haft problemer med at row ikke returnerer det der var tiltænkt...
Avatar billede hmortensen Nybegynder
22. november 2004 - 18:15 #13
Du bliver nødt til at køre den gennem en form for løkke.

Og med hensyn til mysql_fetch_array, kan du sætte en ekstra parameter:
mysql_fetch($resource, MYSQL_ASSOC|MYSQL_NUM|MYSQL_BOTH), og der er ingen performance forskel, om du bruger _array, _assoc eller _row
Avatar billede djthomas Nybegynder
22. november 2004 - 18:41 #14
Hmm nu har jeg også prøvet at køre det igennem en løkke, det virker stadig ikke helt som jeg vil ha det til.

Jeg har lavet denne class:

class Imageinsert extends Webpage{

    function insert_images( $content, $page_id ){
   
        $result = $this->get_images( $page_id );
        $images = mysql_fetch_array( $result );
       
            $content = preg_replace("/\[img=([0-9]+)\]/ie", "'<img src=\"/upload/'.\$images[\\1].'\" alt=\"\" />'", $content);
       
        return $content;
    }
   
    function get_images( $page_id ){
        $result = mysql_query("SELECT
                                    0,
                                    picture
                                FROM
                                    ".$this->images_table."
                                WHERE
                                    page_id = ".$page_id);
        if( $result ){
            return $result;
        }
    }
   
}

En har tidligere hjulpet mig på vej med noget phpkode, se det her: http://schaefner.dk/files/temp/exp/562624.php . og på den side virker det fint, men jeg tror så måske at det kan være en fejl i mit udtræk eller hvad? Måske mit array bare ikek ser fint nok ud.

Vil godt udlove 100p til den der kan hjælpe mig, for nu begynder virkelig at irretere mig det her problem ;-S
Avatar billede Slettet bruger
23. november 2004 - 10:51 #15
Det smarteste vil nok være at lade get_images lave et array med alle rækkerne:

function get_images( $page_id ){
  $result = mysql_query("SELECT
                          0,
                          picture
                        FROM
                          ".$this->images_table."
                        WHERE
                          page_id = ".$page_id);
  if( $result ){
    $row=array();
    while($row[]=mysql_fetch_row($result));
    return $row;
  } else {
    return false;
}

Så skal der naturligvis ikke kaldes mysql_fetch_row på resultatet fra den funktion.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester