Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[MySQL] Gegevens opvragen

Pagina: 1
Acties:
  • 145 views sinds 30-01-2008

  • BLACKfm
  • Registratie: Maart 2004
  • Laatst online: 20-11 18:52
Hallo,

Ik ben me een beetje aan het verdiepen in het informatie uitlezen van een mysql database.
Mijn huidige kennis niveau wat dit betreft zit een beetje op 5%, wat zich beperkt in het een beetje kunnen "logiliseren" van de inhoud.

Nu probeer ik een soort "active topics" lijst te maken van het "direct topics" forum. De gegevens die ik wil ophalen zijn de eerste 5 nieuwe topics.
Deze gegevens staan in de database "_forum" , in de tabel "dt_topics" en in het veld van "naam".

Nu moet ik om te beginnen contact leggen met de database en dat doe ik op de volgende manier : (Ik gebruik hierbij hetzelfde als DT zelf gebruikt)

PHP:
1
2
3
4
5
6
7
8
9
10
<?
//Configuratie
$db_url = 'localhost'; //URL van je database
$db_user = 'gebruikersnaam'; //Gebruikersnaam van je database
$db_pass = 'wachtwoord'; //Wachtwoord van je database
$db_naam = 'databasename'; //De naam van je database

@mysql_connect($db_url, $db_user, $db_pass)or die('Er kan geen verbinding worden gemaakt met je database server. Probeer de juiste gegevens in te vullen.');
@mysql_select_db($db_naam) or die('De databasenaam die je hebt ingevuld lijkt niet te bestaan.');
?>


Vervolgens maak ik op de volgende manier me bestand op om de gegevens op te halen :

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?
include 'connected.php'; // Bestand voor verbinding met database

$rows = 5; // Aantal zichtbare rijen

$result = mysql_query("select * from $dt_topic order by id desc limit $rows") or die ("Kan geen verbinding maken want ".mysql_error()); 

// print de gegevens in een tabel
if (mysql_num_rows($result)) {
print "<table cellpadding=2 cellspacing=0 border=0 width=\"100%\">\n";
while ($qry = mysql_fetch_array($result)) {
print "<tr><td>";
print $qry[naam];
print "</td></tr>\n";
}
print "</table>\n";
}
mysql_close();

?> 


Waarbij ik vervolgens de volgende foutmelding krijg :

code:
1
Kan geen verbinding maken want You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order by id desc limit 5' at line 1


Ik moet zeggen dat ik "maar wat" van het internet heb geplukt, dus het kan zijn dat de opmaak niet geheel naar de standaard is. Maar na verschillende syntax errors en het opnieuw invoeren van de template code die ik van hier heb krijg ik dus de bovenstaande foutmelding.

Iemand die mij kan vertellen wat ik fout doe (wat vast een heleboel is). Na zoveel zoeken kom ik er anders maar niet uit. Dat ie nu wellicht niet de 5 nieuwste toont, of dat opmaak van de tabel niet lekker is maakt mij even niet uit (even simpel beginnen), maar wellicht is dat juist wel aan de orde om die gegevens hier op te halen, maar daar zal iemand mij wel op kunnen wijzen.

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Sla er eens een SQL-handleiding op na, en leer foutmeldingen lezen.

Je query klopt niet. Echo je query eens, en kijk wat er niet aan klopt.

[ Voor 23% gewijzigd door CodeCaster op 24-01-2008 20:48 . Reden: oeps :+ ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • BLACKfm
  • Registratie: Maart 2004
  • Laatst online: 20-11 18:52
Het gebruik van hoofdletters ?

offtopic:
Dit heb ik van de concullega's tz.nl

[ Voor 46% gewijzigd door BLACKfm op 24-01-2008 20:56 ]


  • pachacuti
  • Registratie: Januari 2002
  • Laatst online: 14-09 12:40
Hoofdletters maakt niets uit.

Begin eens met in je connectiebestand de @-tekens weg te halen want deze verbergen eventuele foutboodschappen.

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Echo je query eens.
PHP:
1
2
$query = "select * from $dt_topic order by id desc limit $rows";
echo $query;

En bekijk wat er niet klopt aan de query. Als je query klopt (wat 'ie nu dus niet doet) kun je verder gaan met de code:
PHP:
1
$result = mysql_query($query) or die ("Query mislukt: ".mysql_error());


Maar dat kun je zelf wel bedenken. Wat staat er in de variabele $dt_topic, wanneer wordt die gevuld, enz?

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • weebl
  • Registratie: Juni 2002
  • Laatst online: 00:08

weebl

YARR!

Nee, dat maakt niks uit.

Probeer dit eens:

code:
1
SELECT * FROM $dt_topic LIMIT $rows ORDER BY id DESC

  • BLACKfm
  • Registratie: Maart 2004
  • Laatst online: 20-11 18:52
Het probleem is inmiddels opgelost op TZ.nl (sorry, maar hoe meer zielen hoe meer vreugt).

Uiteraard komt het door mijn gebrek aan kennis, maar de bron code was ook niet goed opgesteld (maar dat kan ik als leek niet zien, maar daar ben ik nu wel op gewezen).

code:
1
2
3
<?
$result = mysql_query("SELECT * FROM dt_topic ORDER BY id DESC LIMIT ".$rows) or die ("Kan geen verbinding maken want ".mysql_error());
?>


Dit was de juiste oplossing. En wat ik er van heb geleerd ? Hier, dat hooftletters dus niets uitmaken, en van de juiste code maak ik op dat het " teken VOOR .$rows moest staan, waaruit ik opmaak dat je de opdrachten voor mysql dus tussen die tekens zet met de bron erbuiten.

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Eh nee, dit was een prima query geweest:
PHP:
1
$query = "select * from dt_topic order by id limit $rows";

Die precies hetzelfde zou doen als deze:
PHP:
1
$query = "select * from dt_topic order by id limit ".$rows;


Het enige wat er veranderd is, is dat het dollarteken voor 'dt_topic' weg is gehaald. De query die je eerst probeerde uit te voeren was dus: "select * from order by id limit 5", omdat de variabele $dt_topic leeg was niet bestond. Maar daar ben je op TZ ook al op gewezen ;)

Toekomstlesje: dit had je gezien als je de query had ge-echo'd. :)

[ Voor 29% gewijzigd door CodeCaster op 24-01-2008 22:30 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • Sh4wn
  • Registratie: December 2006
  • Laatst online: 12-11-2017

Sh4wn

Bio-informatica

of error_reporting op E_ALL zet :) (Iets wat ik je zeer aanraad)

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Typisch geval van de query echoen en zelf aan het debuggen slaan. ;) Dat staat overigens ook in onze PHP-FAQ uitgelegd. :)

Ik doe dit topic maar dicht.

'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.

Pagina: 1

Dit topic is gesloten.