Ik heb een MySQL error waar ik maar niet uitkom

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Maar7en
  • Registratie: Augustus 2010
  • Laatst online: 31-08 14:35
Beste mede tweakers.

Sinds vorig jaar volg ik informatica lessen op school. Over het algemeen gaat dit mij zeer goed af.
Maar vorige week probeerde ik iets wat toch niet helemaal wilde werken en na anderhalve week besloot ik toch maar de hulp in te roepen van mensen met meer ervaring.(Mijn eigen docent kwam er ook niet uit)

Het punt is dat ik het aantal columns met een specifieke waarde als een php waarde nodig heb.

Of om het wat uitgebreider te verwoorden, ik wil het aantal afbeeldingen hebben dat is geupload door de user die opdat moment is ingelogd/op wiens pagina je je bevindt. Bij het uploaden van afbeeldingen worden ze automatisch in een tabel gezet met hun naam en het nummer van de uploader.

Ik kan alle andere nodige informatie uit de tabel halen, maar krijg het gewoon niet voor elkaar om deze specifieke waarde eruit te halen.

Mijn huidige code is alsvolgt:

PHP:
1
2
3
4
5
6
7
8
mysql_select_db("inf05?o9126") or die(mysql_error());
$queryt = "SELECT * COUNT member_id AS aantal FROM Afbeeldingen WHERE member_id='$member'";

 
$resultt = mysql_query($queryt); 
mysql_fetch_array($resultt); 
$num_rows = $valuest['aantal']; 
echo $num_rows;

En daarmee krijg ik deze error:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/vhosts/**********.nl/web_users/*****/member-index.php on line 45
Ik heb het ook geprobeerd met mysql_count_rows. Ook dat gaf een soortgelijke error.

Ik ben niet opzoek naar een quickfix, een uitleg waarom het niet werkt zou al zeer gewaardeerd worden.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Select * count member_id :?
Heb je error reporting e.d. wel aan staan? Want mysql_query zou een fout moeten geven AFAIK. Je query is gewoon ongeldig. En zet anders, voor mijn part, even een or die(mysql_error()); achter mysql_query($query).

Tip: echo je query eens en mik die in PhpMyAdmin ofzo. En neem de documentatie er eens bij.

P.s.: Als je code post, gebruik dan code tags, niet quote-tags ;) En tot slot: Waar hoort mijn topic?
WEB >> PRG

[ Voor 153% gewijzigd door RobIII op 05-10-2011 10:04 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • MuddyMagical
  • Registratie: Januari 2001
  • Laatst online: 12:42
Met RobIII: Da kan nie.. :+

Edit: Mag de oplossing niet geven van RobIII ;)

Voor het gebruik van Mysql_count_rows moet je je query ook even wijzigen natuurlijk:
PHP:
1
2
3
4
5
$queryt = "SELECT member_id FROM Afbeeldingen WHERE member_id='$member'";

$resultt = mysql_query($queryt) or die( "Error : ".mysql_error() ); 
$num_rows = mysql_count_rows($resultt); 
print_r($num_rows);



Sorry, maar komt je docent hier ook niet uit?! :X Linkje voor de docent dan

[ Voor 59% gewijzigd door MuddyMagical op 05-10-2011 10:12 ]


Acties:
  • 0 Henk 'm!

  • Avalaxy
  • Registratie: Juni 2006
  • Nu online
De error die je krijgt komt doordat je geen resource hebt, oftewel je hebt geen data die te fetchen valt door mysql_fetch_array(). Dit komt natuurlijk omdat je query gewoon fout is.

Lees je overigens eens in over SQL injection, dat is in jouw code mogelijk.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Avalaxy schreef op woensdag 05 oktober 2011 @ 10:09:
Lees je overigens eens in over SQL injection, dat is in jouw code mogelijk.
Dat hoeft helemaal niet waar te zijn; weet jij of $member al gecontroleerd is?
:N
Give a man a fish and feed him for a day. Teach a man how to fish and feed him for a lifetime.

[ Voor 30% gewijzigd door RobIII op 05-10-2011 10:11 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • MuddyMagical
  • Registratie: Januari 2001
  • Laatst online: 12:42
Avalaxy schreef op woensdag 05 oktober 2011 @ 10:09:
De error die je krijgt komt doordat je geen resource hebt, oftewel je hebt geen data die te fetchen valt door mysql_fetch_array(). Dit komt natuurlijk omdat je query gewoon fout is.

Lees je overigens eens in over SQL injection, dat is in jouw code mogelijk.
Beetje makkelijk gezegd aangezien je alleen een snippet ziet en niet de volledige code.

[ Voor 0% gewijzigd door MuddyMagical op 05-10-2011 10:56 . Reden: Spellingscontrole. Thanks Avalaxy ]


Acties:
  • 0 Henk 'm!

  • D-Raven
  • Registratie: November 2001
  • Laatst online: 10-09 20:32
Maar7en schreef op woensdag 05 oktober 2011 @ 09:57:
.... (Mijn eigen docent kwam er ook niet uit) ....
Van de hele post vindt ik dit nog wel het meest schokkende...

Acties:
  • 0 Henk 'm!

  • Avalaxy
  • Registratie: Juni 2006
  • Nu online
MuddyMagical schreef op woensdag 05 oktober 2011 @ 10:11:
[...]

Beetje makkelijk gezegtd aangezien je alleen een snippet ziet en niet de volledige code.
True, maar gut feeling zegt dat het mogelijk is :P

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 16:05

MueR

Admin Tweakers Discord

is niet lief

Hoe kom je uberhaupt aan dat soort code? Heb je al eens de php manual er bij gepakt en naar die voorbeelden gekeken? Of een lesboek?

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • djexplo
  • Registratie: Oktober 2000
  • Laatst online: 07-07 15:40
D-Raven schreef op woensdag 05 oktober 2011 @ 10:20:
[...]
Van de hele post vindt ik dit nog wel het meest schokkende...
Als docent heb je 20+ studenten in de klas, die constant syntax fouten maken. Je hebt gewoon geen tijd om al die code door te lezen.

Online tool om je SQL strings mee te checken en te formatten:
http://www.dpriver.com/pp/sqlformat.htm

'if it looks like a duck, walks like a duck and quacks like a duck it's probably a duck'


Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

bye bye

[ Voor 91% gewijzigd door BtM909 op 05-10-2011 13:21 ]

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


Acties:
  • 0 Henk 'm!

Verwijderd

Verder, waarom vergelijk dat wat ik aanneem dat een int moet zijn (member_id) met een string? Stringvergelijkingen zijn vrij langzaam in MySQL.

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Beter lezen

[ Voor 80% gewijzigd door Snake op 05-10-2011 10:53 ]

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op woensdag 05 oktober 2011 @ 10:46:
Verder, waarom vergelijk dat wat ik aanneem dat een int moet zijn (member_id) met een string? Stringvergelijkingen zijn vrij langzaam in MySQL.
Gelukkig zal MySQL die cast niet voor elk record uitvoeren maar enkel (vlak) voor 't daadwerkelijk uitvoeren van de query en dus merk je niets van die (micro)"optimalisatie". Neemt niet weg dat je een terecht punt maakt dat je je datatypes goed uit elkaar moet houden.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Zwaai zwaai

[ Voor 94% gewijzigd door BtM909 op 05-10-2011 13:22 ]


Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Ok mensen, als je niet inhoudelijk kan reageren, dan blijf je lekker uit het topic!

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • Maar7en
  • Registratie: Augustus 2010
  • Laatst online: 31-08 14:35
Dank jullie allemaal voor de vreselijk snelle reacties, ik ben weer aan het werk gegaan en heb alles opnieuw gecheckt. Er klopte inderdaad helemaal niks van mijn query en na daar goed naar te hebben gekeken zat MM helemaal goed.
De query werkt helemaal goed en geeft wat ie moet geven, maar laat zich niet tellen.
De error is nu verschoven naar:
MYSQL ERROR IS -

Fatal error: Call to undefined function mysql_count_rows() in /var/www/vhosts/inf05.hageveld.nl/web_users/o9126/member-index.php on line 45
$member is geheel injection veilig, het is het nummer van de persoon die het heeft geupload. Dat wordt rechtstreeks uit de session gehaald wanneer de afbeelding wordt geupload.

Sorry nog voor mijn beginners fouten als het gaat om het kiezen van de juiste plek voor mijn topic.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
[google=mysql_count_rows]
quote: Google
Did you mean: mysql_num_rows
Komaan; een beetje eigen inzet kan geen kwaad. Zelf al had je meteen in de documentatie gezocht en Google links laten liggen had je van php.net de juiste resultaten gekregen. En daarbij is de error zo klaar als een klontje: "undefined function mysql_count_rows".

Overigens wil je die hier helemaal niet gebruiken; MySQL moet een complete resultset met X records gaan teruggeven waarna mysql_num_rows de records uit die set gaat tellen; lekker efficient. Laat MySQL gewoon meteen de count returnen.
Maar7en schreef op woensdag 05 oktober 2011 @ 18:01:
$member is geheel injection veilig, het is het nummer van de persoon die het heeft geupload. Dat wordt rechtstreeks uit de session gehaald wanneer de afbeelding wordt geupload.
Dat iets uit een sessie-variabele komt maakt 't nog niet per definitie 'injection veilig', dat begrijp je?

[ Voor 112% gewijzigd door RobIII op 05-10-2011 18:23 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
RobIII schreef op woensdag 05 oktober 2011 @ 10:57:
[...]

Gelukkig zal MySQL die cast niet voor elk record uitvoeren maar enkel (vlak) voor 't daadwerkelijk uitvoeren van de query en dus merk je niets van die (micro)"optimalisatie". Neemt niet weg dat je een terecht punt maakt dat je je datatypes goed uit elkaar moet houden.
Hier gaat het goed, vergelijk je een stringveld met een integer dan converteert MySQL de strings en zit je wel met problemen (veel conversies en geen bruikbare index).

Tweede opmerking: het is in 't algemeen beter om in MySQL de telling uit te voeren, dan om een aantal rijen op te vragen en zelf te tellen.

[ Voor 11% gewijzigd door GlowMouse op 05-10-2011 22:01 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
GlowMouse schreef op woensdag 05 oktober 2011 @ 22:00:
Hier gaat het goed, vergelijk je een stringveld met een integer dan converteert MySQL de strings en zit je wel met problemen (veel conversies en geen bruikbare index).
Ik mag hopen dat MySQL een eventuele ("impliciete") cast per definitie naar het type van 't veld in kwestie doet; dat moet (zo even vlug geschat :P ) volgens mij altijd kunnen :? Als dat niet kan kan MySQL net zo goed meteen al kappen nog voordat de query daadwerkelijk uitgevoerd gaat worden.
GlowMouse schreef op woensdag 05 oktober 2011 @ 22:00:
Tweede opmerking: het is in 't algemeen beter om in MySQL de telling uit te voeren, dan om een aantal rijen op te vragen en zelf te tellen.
Dat zeg ik toch :?
RobIII schreef op woensdag 05 oktober 2011 @ 18:15:
Overigens wil je die hier helemaal niet gebruiken; MySQL moet een complete resultset met X records gaan teruggeven waarna mysql_num_rows de records uit die set gaat tellen; lekker efficient. Laat MySQL gewoon meteen de count returnen.
Of loop je nou gewoon te papegaaien en had je 't niet tegen mij? :P :+ :>

[ Voor 28% gewijzigd door RobIII op 05-10-2011 22:08 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
RobIII schreef op woensdag 05 oktober 2011 @ 22:06:
[...]

Ik mag hopen dat MySQL een eventuele ("impliciete") cast per definitie naar het type van 't veld in kwestie doet; dat moet (zo even vlug geschat :P ) volgens mij altijd kunnen :? Als dat niet kan kan MySQL net zo goed meteen al kappen nog voordat de query daadwerkelijk uitgevoerd gaat worden.
Helaas, zie http://dev.mysql.com/doc/refman/5.0/en/type-conversion.html
For comparisons of a string column with a number, MySQL cannot use an index on the column to look up the value quickly. If str_col is an indexed string column, the index cannot be used when performing the lookup in the following statement:

SELECT * FROM tbl_name WHERE str_col=1;

The reason for this is that there are many different strings that may convert to the value 1, such as '1', ' 1', or '1a'.
en je lange replies lees ik niet altijd helemaal :$

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Hoewel ze een punt hebben als ze dergelijke values (" 1", "1a" etc.) allemaal willen matchen: WHY :'(
True; het komt op meer plaatsen voor dat een value als in hun voorbeelden naar 1 parsed maar waarom zou je daaraan conformeren bij zoiets?
GlowMouse schreef op woensdag 05 oktober 2011 @ 23:08:
en je lange replies lees ik niet altijd helemaal :$
Dat wordt voor jou dan 500x handgeschreven, vrijdag in te leveren "Ik zal voortaan altijd braaf RobIII's posts volledig lezen" >:)

[ Voor 46% gewijzigd door RobIII op 05-10-2011 23:19 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1