probleem al opgelost toch bedankt ;)
- You have an error in your SQL syntax; check the manual that corresponds to your MySQL
-
18-10-2009, 20:37 #1
- Berichten
- 170
- Lid sinds
- 16 Jaar
You have an error in your SQL syntax; check the manual that corresponds to your MySQL
Laatst aangepast door Wesley S. : 18-10-2009 om 22:07 Reden: bedankt
-
In de schijnwerper
-
18-10-2009, 20:45 #2
- Berichten
- 613
- Lid sinds
- 19 Jaar
Waar komt $id vandaan?
mysql_fetch_assoc is overigens sneller dan mysql_fetch_object
-
18-10-2009, 20:48 #3
- Berichten
- 312
- Lid sinds
- 15 Jaar
id = '$id'
-
18-10-2009, 21:14 #4
- Berichten
- 64
- Lid sinds
- 17 Jaar
<?
include ("config.php");
$filmpje = "SELECT * FROM ALLETRAILERS WHERE id = '".$id."'";
$filmpjequery = mysql_query($filmpje) or die (mysql_error());
while ($list = mysql_fetch_assoc($filmpjequery)) {
$trailer = $list['trailer'];
$siteid = $list['siteid'];
$textkort = $list['textkort']
$episode = $list['episode'];
$website = $list['website'];
$voice_met_trailer = $list['voice_met_trailer'];
}
?>
-
18-10-2009, 21:46 #5
- Berichten
- 95
- Lid sinds
- 18 Jaar
Het meest voor de hand liggend is dat $id leeg is, en dat hij daarom de query niet kan uitvoeren. Want dan zou de query zijn:
SELECT FROM ALLETRAILERS WHERE id =
En dat gaat niet werken. Echo voordat je de query eens uitvoert, de variabele $id, dus zoals in het begin, dit stukje:
<?
include ("config.php");
echo 'De inhoud van $id is: ' . $id;
$filmpje = "SELECT * FROM ALLETRAILERS where id = $id";
-
18-10-2009, 21:48 #6
- Berichten
- 1.483
- Lid sinds
- 16 Jaar
-
19-10-2009, 12:05 #7
- Berichten
- 376
- Lid sinds
- 18 Jaar
-
19-10-2009, 12:25 #8
- Berichten
- 1.483
- Lid sinds
- 16 Jaar
lol. Fout!
Laat die waardeloze beweringen even achter je of stuur ze via PM. Andere gebruikers leren hierdoor een foutieve manier van de codering aan omdat jij het ergens oneens over bent.
Een integer (cijfer) schrijven we in vrijwel alle web talen zonder quotes of nears dus ook in je SQL. Je komt met een argument waarbij je aangeeft dat het gebruik zonder nears ( ' ) kan leiden tot een SQL injection.
Foutief voorbeeld:
SELECT
*
FROM
`table`
WHERE `id` = '".$id."'
Dit voorbeeld bevat dus nears ( ' ) en werkt evengoed als een voorbeeld zonder nears. Maar wat nu als er in $id het onderstaande bevat?
$id = "'; DELETE FROM `table` WHERE `id` > '0";
Dan heb je deze SQL:
De SQL injection met $id die kwaadaardige SQL codering bevat:
SELECT
*
FROM
`table`
WHERE `id` = ''; DELETE FROM `table` WHERE `id` > '0'
Conclusie:
Met nears ( ' ) is het net zo onveilig als zonder nears dus kun je het beter schrijven zoals het hoort (zonder nears bij een integer).
Wat is wel de juiste oplossing?
Het is vrij simpel. Je weet dat $id alleen een cijfer mag bevatten? Controleer hem van te voren met ctype_digit (ctype_digit — Check for numeric character(s)) zodat je altijd zeker weet dat het een getal is wanneer je deze weg schrijft in je SQL.
Daarnaast hebben we ook nog de mysql_real_escape_string (mysql_real_escape_string — Escapes special characters in a string for use in a SQL statement) speciaal ontworpen om de inputs van de SQL te beveiligen.
-
19-10-2009, 15:04 #9
- Berichten
- 376
- Lid sinds
- 18 Jaar
Waarom ik dan toch de nears gebruik, ook al is de variabele zeker numeriek? Ik maak gebruik van functies die mijn MySQL-query's automatisch genereren. De functie zou alleen maar ingewikkelder en nutteloos groter worden als ik met een if-constructie de nears bij numerieke variabelen zou weglaten. Ook heeft het weglaten van de nears geen toevoeging.
Je argument over dat SQL injection nog wel mogelijk is met het gebruik van nears, klopt. Wil je SQL-injection tegengaan, zorg dan altijd voor het gebruik van de functie mysql_real_escape_string().
-
19-10-2009, 16:22 #10
- Berichten
- 1.483
- Lid sinds
- 16 Jaar
@Peter, blijkbaar begrijp je mij niet helemaal? Dat het werkt wil nog niet zeggen dat het correct is? Nogmaals: Nears gebruiken bij een integer is dus wel degelijk fout en dat blijf ik hier dus niet aan het herhalen. Nog maar een paar MySQL versies verder en je kunt geen integers afleveren als string. Daarnaast gebeurd het regelmatig dat leden vast zitten omdat ze een integer met nears in hun querie afhandelen.
Dat jij de moeite niet neemt om die toch wel onnodige if constructie toe te passen aan je functies moet je zelf weten. Als je wil dat je codering jaren lang goed blijft zul jij je moeten aanpassen aan de regels van deze coderingen.
Tot die tijd geeft dat nog geen reden om leden op dit forum verkeerde instructies te geven. Ook niet wanneer jij het zelf zo onnodig vind.
Aanvullend bericht:
Eigenlijk begrijp ik deze discussie niet... Je beweerd namelijk:
PHP Code:<?php
$var = '100';
?>
PHP Code:<?php
$var = 100;
?>Laatst aangepast door Arek van Schaijk : 19-10-2009 om 16:26 Reden: Automatisch samengevoegd.
-
19-10-2009, 19:37 #11
- Berichten
- 376
- Lid sinds
- 18 Jaar
Dit was mijn laatste reactie in dit topic, omdat dit een discussie tussen twee personen is en niet meer nuttig voor TS. Arek, als je nog vragen hebt of wilt reageren, PM me dan.Laatst aangepast door Peter W. : 19-10-2009 om 19:45
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic