[PHP] Maar 1 waarde ophalen, zonder loops?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • semicon
  • Registratie: Augustus 2003
  • Laatst online: 20-08 14:04
eys :),

Ik heb waarschijnlijk zo een makkelijke vraag maar kan echt nergens een goed antwoord vinden, en hoop dat iemand hier mij een tip kan geven over het volgende probleem.

Ik moet voor school een php forum als opdracht schrijven en het lukt allemaal wel goed en aardig. Nou heb ik alleen 1 klein ding dat me stoort en dat zijn de titels boven elke topicpagina, want deze haal ik op met een while, zo dus:

code:
1
2
3
4
5
6
7
8
9
10
11
12
    $result = mysql_query("
        SELECT Subject 
        FROM Topics 
        WHERE TopicId = $id 
    "); 
    if(mysql_num_rows($result) >= 1)
    {
        while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
        {           {
            echo '<h2>' . $row[0] . '</h2>';
        }
    }


Het werkt natuurlijk, maar ik zoek iets zodat ik zonder een while 1 waarde uit 1 rij van 1 tabel krijg, supersimpel zou je zeggen! :) Het lukt me echt alleen niet, en kan ook nergens een voorbeeld vinden (zelfs php.net geen resultaat). Ik hoop dat iemand mij kan vertellen of het uberhaupt wel kan, en zo ja natuurlijk hoe.

wat had ik al geprobeerd, dit soort dingen:
code:
1
2
3
4
5
6
7
8
9
 $row = mysql_fetch_array($result)
  echo $row[0];
// werkt niet

 echo $result->Subject; // moest toch wat

echo $result[0];

// niets mog baten!

Acties:
  • 0 Henk 'm!

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 14:31
Ik denk dat je mysql_result bedoelt?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Je eerste stukje code werkt trouwens ook niet. Je haalt in Associative mode op, maar gebruikt vervolgens een index ipv een kolomnaam.

In je tweede voorbeeldje zou het eerste stukje gewoon moeten werken (mits je rekening houd met bovenstaande). Eventueel kun je in de manual nog even naar mysql_result kijken.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • semicon
  • Registratie: Augustus 2003
  • Laatst online: 20-08 14:04
Janoz schreef op woensdag 12 oktober 2005 @ 10:56:
Je eerste stukje code werkt trouwens ook niet. Je haalt in Associative mode op, maar gebruikt vervolgens een index ipv een kolomnaam.

In je tweede voorbeeldje zou het eerste stukje gewoon moeten werken (mits je rekening houd met bovenstaande). Eventueel kun je in de manual nog even naar mysql_result kijken.
ohja true, verkeerde stukje gekopieerd :)


ennuh, dit is het gewoon denk ik :D --> mysql_result($result, 0); edit:het werkt

[ Voor 3% gewijzigd door semicon op 12-10-2005 10:58 ]


Acties:
  • 0 Henk 'm!

  • Metalman
  • Registratie: December 2003
  • Laatst online: 11:01
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$result = mysql_query("
        SELECT Subject 
        FROM Topics 
        WHERE TopicId = $id 
    "); 
    if(mysql_num_rows($result) >= 1)
    {
        $row = mysql_fetch_array($result, MYSQL_ASSOC); 
        echo '<h2>' . $row['Subject'] . '</h2>';
    }
?>

Zoiets zou toch gewoon moeten werken.

Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 02:04

aex351

I am the one

inderdaad geen while gebruiken aangezien die door blijft gaan als de waarde true is.

< dit stukje webruimte is te huur >


Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Het scheelt een hoop als je begrijpt wat de mysql_fetch_*-functies doen;
Namelijk, het resultaat op de pointer terug geven, en de pointer 1 positie verder verplaatsen. Hetzelfde als de array functie each() dus.
Wanneer de pointer bij het eind van de resultset komt geeft de pointer false, waardoor je while stopt.

Het voorbeeld welke je zelf geeft waarvan je zegt dat deze niet werkt;
PHP:
1
$row = mysql_fetch_array($result); echo $row[0];
zou ook gewoon meoten werken

Let overignes op. Als je de numerieke positie van de kolom ($row[0]) gebruikt om een resultaat op te halen, kun je mysql_fetch_row() gebruiken. Indien je de asosiatieve naam gebruikt kun je mysql_fetch_assoc() gebruiken.
mysql_fetch_array() is een samenvoeging van deze 2 functies en geeft een asosiatieve array terug met ook de numerieke keys geset, een array 2 keer zo groot als nodig dus. Nu zul je het verschil bij kleine projecten niet werken... maar bij grote projecten kan dit secondes gaan schelen.

Acties:
  • 0 Henk 'm!

  • glashio
  • Registratie: Oktober 2001
  • Laatst online: 18-09 10:13

glashio

C64 > AMIGA > PC

PHP:
1
2
3
4
$val = is_resource($res = mysql_query("SELECT 'foobar'")) && mysql_num_rows($res) > 0 && is_array($rec = mysql_fetch_row($res)) && mysql_free_result($res) ? $rec[0] : NULL;

// Echo the result
echo "\$val = $val";


Edit : mysql_free_result($res)
Edit 2 : @Bosmonster :
Tuurlijk t'is bagger :X
Je moet het op z'n minst in een functie zetten :
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function getSqlValue($q) {

$res = @mysql_query($q);
if (!is_resource($res))
  return NULL;
if (mysql_num_rows($res) == 0)
  return NULL;
$rec = mysql_fetch_row($res)
if (!is_array($res))
  return NULL;
mysql_free_result($res);
return $rec[0];

}
Zo dan :)

[ Voor 126% gewijzigd door glashio op 12-10-2005 20:11 ]

> Google Certified Searcher
> Make users so committed to Google that it would be painful to leave
> C64 Gospel
> [SjoQ] = SjoQing


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

glashio schreef op woensdag 12 oktober 2005 @ 15:33:
PHP:
1
2
3
4
$val = is_resource($res = mysql_query("SELECT 'foobar'")) && mysql_num_rows($res) > 0 && is_array($rec = mysql_fetch_row($res)) && mysql_free_result($res) ? $rec[0] : NULL;

// Echo the result
echo "\$val = $val";


Edit : mysql_free_result($res)
Was dit een poging tot de meest afgrijselijke regel code ooit?

Acties:
  • 0 Henk 'm!

Verwijderd

offtopic:
@BosMonster
ik vindt dat toch wel een vorm van spiritueel evenwicht, 1 regel om 1 waarde op te halen uit een db...,maar goed, ik prog dan ook af en toe wat in perl voor m'n plezier ;)

Acties:
  • 0 Henk 'm!

Verwijderd

heb je wel eens gekeken naar adodb.
Allerlei fantastische mogelijkheden, zoals
$db->getOne($query) // haalt één waarde op
$db->getCol($query) // haalt een hele kolom op, enz.
Dan hoef je jezelf niet meer druk te maken om dit soort dingen.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op woensdag 12 oktober 2005 @ 22:31:
heb je wel eens gekeken naar adodb.
Allerlei fantastische mogelijkheden, zoals
$db->getOne($query) // haalt één waarde op
$db->getCol($query) // haalt een hele kolom op, enz.
Dan hoef je jezelf niet meer druk te maken om dit soort dingen.
De standaard MySQL-functies kunnen dat ook allemaal? :P

http://php.net/mysql_result haalt bijvoorbeeld gewoon één veld op.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 17-09 20:52

ripexx

bibs

-NMe- schreef op woensdag 12 oktober 2005 @ 22:34:
[...]
De standaard MySQL-functies kunnen dat ook allemaal? :P
http://php.net/myqsl_result haalt bijvoorbeeld gewoon één veld op.
-NMe-, opzich is het wel een redelijke lib die je in ieder geval genoeg mogelijkheden geeft, alleen moet ik het ding nog steeds een trimmen. Want standaard is het veel te uitgebreid.

buit is binnen sukkel


Acties:
  • 0 Henk 'm!

Verwijderd

-NMe- schreef op woensdag 12 oktober 2005 @ 22:34:
[...]

De standaard MySQL-functies kunnen dat ook allemaal? :P

http://php.net/myqsl_result haalt bijvoorbeeld gewoon één veld op.
De functie myqsl_result is mij vreemd :P
Maar zonder een te lange lijst met features te gaan noemen heeft adodb een hele boel voordelen t.o.v. het gebruik van de mysql functies. Alleen het database onafhankelijke karakter al. Een ander groot voordeel is het op eenvoudige manier ondersteunen van transactions.

PEAR DB is natuurlijk ook een optie.

[ Voor 7% gewijzigd door Verwijderd op 12-10-2005 22:42 ]

Pagina: 1