Samo par tipova, možda nekom bude koristilo:
- Stripovanje slasheva treba odraditi odmah, negde u headeru. Samo stripovanje pri interakciji sa bazom može doveste da se (nepravilni) stringovi sa slashevima sačuvaju u neki drugi "izvor" (fajl, pošalju nekom web servisu or whatever). Strip odmah pa ni ne razmišljaš o tome.
- Umesto da koristiš sopstvene funkcije za escapeovanje bolje je da koristiš stvari koje ti PHP i MySQL daju, pre svega mysql_real_escape_string.
- Imati neku prepare funkciju nije nimalo loša stvar. Spašava glavu jer ne moraš da razmišljaš o escapevoanju, samo korstiš gotovu funkciju. Ono što ja koristim je ušnirano na par nivoa pa je jako teško izvući konkretan kod, ali bi izgledalo nešto ovakvo:
PHP kôd:
<?php
function prepare_string() {
$arguments = func_get_args();
if(is_array($arguments) && count($arguments) > 0) {
$sql = array_shift($arguments);
foreach($arguments as $argument) {
$sql = str_replace_first('?', "'" . mysql_real_escape_string($argument) . "'", $sql);
} // foreach
return $sql;
} // if
return false;
} // prepare_string
function str_replace_first($search_for, $replace_with, $in) {
$pos = strpos($in, $search_for);
if($pos === false) {
return $in;
} else {
return substr($in, 0, $pos) . $replace_with . substr($in, $pos + strlen($search_for), strlen($in));
} // if
} // str_replace_first
print prepare_string("SELECT * FROM users WHERE id = ?", 12) . '<br />';
print prepare_string("SELECT * FROM users WHERE id = ? AND name = ?", 12, 'Ilija') . '<br />';
print prepare_string("SELECT * FROM users WHERE id = ? AND name = ?", 12, 'Now with \ slash') . '<br />';
?>
Output:
Kôd:
SELECT * FROM users WHERE id = '12'
SELECT * FROM users WHERE id = '12' AND name = 'Ilija'
SELECT * FROM users WHERE id = '12' AND name = 'Now with \\ slash'
Možemo se ovde još igrati (npr, meni spremi i nizova za IN, prepoznaje neke moje tipove kao DateTime objekte itd), ali poenta je jednostavna i ovo je dovoljno za većinu stvari.
Citat:
Originalno napisao LiquidBrain
To plus regularni izrazi da se uverim da neko nije pokushao neshto... Ako jeste odma logujem IP
|
Mudro! Sad mi reci šta konkretno imaš od toga?