Gebruik van een variable in een query

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sandy Cohen

Sandy Cohen

04/01/2009 05:04:00
Quote Anchor link
Is het gebruik van een variable in een query mogelijk?

Zoiets als:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
mssql_query('SELECT CID,Name,Level,XP,KillCount,DeathCount,Sex,BP,PlayTime FROM Character ORDER BY $type DESC');
?>


Ik krijg namelijk een error als ik $type gebruik ipv van een kolom naam.
 
PHP hulp

PHP hulp

22/12/2024 21:14:05
 
Crispijn -

Crispijn -

04/01/2009 08:25:00
Quote Anchor link
Het beste kan je zo omgaan met het gebruik van je variabelen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?
$sql
= "SELECT
                    CID,
                    Name,
                    Level,
                    XP,
                    KillCount,
                    DeathCount,
                    Sex,
                    BP,
                    PlayTime
            FROM
                    Character
            ORDER BY "
.mysql_real_escape_string($type)." DESC";
$res = mssql_query($sql);
?>


Hierna kijken of $res wel gelukt is en de foutafhandeling klussen :)

Let trouwens wel op die hoofdletters in je veldnamen... die zijn nergens voor nodig en zorgen alleen maar voor verwarring!
 
Sandy Cohen

Sandy Cohen

04/01/2009 09:05:00
Quote Anchor link
Bedankt !
wist niet dat je bij queries ook " .$. " moest gebruiken.
En ik gebruik mssql, dus htmlspecialchars :P
 
Crispijn -

Crispijn -

04/01/2009 09:09:00
Quote Anchor link
Ik heb even voor je gegoogled en je kan beter deze gebruiken dan htmlspecialchars. Dan ben je ook meteen beschermt tegen sql injection.

http://nl3.php.net/mssql_real_escape_string

Succes ermee!
 
Joren de Wit

Joren de Wit

04/01/2009 10:50:00
Quote Anchor link
Quote:
En ik gebruik mssql, dus htmlspecialchars :P
Nee, gebruik zoals Crispijn al zegt de mssql variant van de real_escape_string...

De functie htmlspecialchars() gebruik je alleen als je gegevens output en je niet wilt dat de html uitgevoerd wordt. Gebruik deze functie nooit voordat je gegevens naar een database schrijft, dan verkloot je enkel je data.
 
Sandy Cohen

Sandy Cohen

04/01/2009 12:02:00
Quote Anchor link
ben al bezig geweest met de beveiliging, misschien een beetje te streng, maar je wilt je users ook geschermen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
ltrim(nl2br(stripslashes(htmlentities($_POST['sort']))))
?>
Gewijzigd op 01/01/1970 01:00:00 door Sandy Cohen
 

04/01/2009 12:06:00
Quote Anchor link
@Sandy:
-ltrim haalt enkel spaties weg, doet dus niets met veiligheid
-nl2br vervangt enkel \n door <br>
-Stripslashes haalt juist alle slashes eruit, ik denk dat je hier addslashes bedoelde ;)
-Htmlentities is een variant van htmlspecialchars en gebruik je alleen om output weer te geven.

Als het echt om de veiligheid gaat, gebruik dan bij voorkeur voor een db query mysql_real_escape_string, of anders strip_tags en addslashes.

Succes!
Gewijzigd op 01/01/1970 01:00:00 door
 
Joren de Wit

Joren de Wit

04/01/2009 12:10:00
Quote Anchor link
Sandy Cohen schreef op 04.01.2009 12:02:
ben al bezig geweest met de beveiliging, misschien een beetje te streng, maar je wilt je users ook geschermen.
Helaas pas je nu allemaal functie toe die je juist gebruikt nadat je gegevens uit de database hebt gehaald. Je wilt de data zo puur mogelijk in je database hebben staan, dan kun je later afhankelijk van de toepassing wel bepalen welke functies je wilt gebruiken!

In jouw geval is mssql_real_escape_string() dus ook de enige functie die je toe hoeft te passen voordat je data invoegt in de database. Dat is veilig genoeg...
 
Bo az

Bo az

04/01/2009 12:29:00
Quote Anchor link
Even voor de mensen hier die nog nooit met mssql gewerkt hebben. mssql gebruik 'sybase style escaping', waar bij mysql addslashes nog enige vorm van veiligheid kan bieden omdat er met slashes wordt geescaped, heeft dat bij mssql geen zin. mssql escaped door een quote er voor te plaatsen.
 
Crispijn -

Crispijn -

04/01/2009 12:42:00
Quote Anchor link
maar de real escape string is dan toch nog steeds wel aan te raden?
 
Joren de Wit

Joren de Wit

04/01/2009 12:49:00
Quote Anchor link
Crispijn schreef op 04.01.2009 12:42:
maar de real escape string is dan toch nog steeds wel aan te raden?
Ik heb nog eens in de PHP handleiding gekeken, maar kan daar niets over mssql_real_escape_string vinden. De pagina waar de link naartoe gaat, is die van mysql_real_escape_string...

Ik nam aan dat de real_escape_string functie ook wel voor mssql zou bestaan, maar dat is dus blijkbaar niet het geval. Een alternatief zou het gebruik van PDO kunnen zijn waarbij je met PDO::quote() aan de slag zou kunnen gaan.
 
Crispijn -

Crispijn -

04/01/2009 13:22:00
Quote Anchor link
Je hebt gelijk! Wat maf dat mssql niet deze manier van beveiligen kent. Dan zou ik me ook maar verdiepen in PDO, als je da eenmaal onder de knie hebt werkt het echt heerlijk!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.