Gebruik van een variable in een query
Zoiets als:
Code (php)
1
2
3
2
3
<?
mssql_query('SELECT CID,Name,Level,XP,KillCount,DeathCount,Sex,BP,PlayTime FROM Character ORDER BY $type DESC');
?>
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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);
?>
$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!
wist niet dat je bij queries ook " .$. " moest gebruiken.
En ik gebruik mssql, dus htmlspecialchars :P
Quote:
Nee, gebruik zoals Crispijn al zegt de mssql variant van de real_escape_string...En ik gebruik mssql, dus htmlspecialchars :P
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.
-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!
Sandy Cohen schreef op 04.01.2009 12:02:
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!ben al bezig geweest met de beveiliging, misschien een beetje te streng, maar je wilt je users ook geschermen.
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...
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.
maar de real escape string is dan toch nog steeds wel aan te raden?
Crispijn schreef op 04.01.2009 12:42:
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...maar de real escape string is dan toch nog steeds wel aan te raden?
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.
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!