Jump to content
php.lv forumi

Datu "escaping" iekš MySQL db


Toms

Recommended Posts

Nav jautājums. Vienkārši veselīga interese :)

 

Tātad, visus datus, kas jāieliek datubāzē, apstrādāju ar šādu funkciju:

 

/****************************************************************************/
function MakeSafe($query,$html = false){
	if (!$html) {
		// Sataisa < > u.c. par &, &nd;
		$query = htmlspecialchars($query);
	}
	// Stripslashes
	if (get_magic_quotes_gpc()) {
		$query = stripslashes($query);
	}
	return $query = "'".mysql_real_escape_string($query)."'";
} /* MakeSafe */
/****************************************************************************/

// SQL izskatās šāds:

$sql = sprintf("INSERT INTO tabula VALUES (NULL,%s,%s,%s)",
MakeSafe($_POST['value1']),
MakeSafe($_POST['value2']),
MakeSafe($_POST['jaunuma_teksts'],true) // Juanuma teksts ir ar WYSIWYG sataisīts, piemēram tinyMCE
);
mysql_query($sql);

 

Radās doma - varbūt nav jēgas katru mainīgo apstrādāt, varbūt var uzreiz visu $sql...

 

Kā Jūs eskeipojat savus SQL?

Link to comment
Share on other sites

Tas ir vajadzīgs tajā brīdī, kad iekš CMS tiek pievienots, piemēram, jaunums, kam jāparādās pirmajā lapā. Lai neiznīcinātu <p> <b> <img> u.c. tagus.

 

Ko domā ar "reāli tagi"?

 

EDIT: Kā pats dari?

Edited by Toms
Link to comment
Share on other sites

v3rb0, ideāls variants, nebūtu iedomājies. Thnx.

 

EDIT: Tikai nesaprotu, kāda jēga ne-eskeipot ciparus? Kāda jēga pārbaudīt, vai tas ir cipars?

Edited by Toms
Link to comment
Share on other sites

Klez, jēga viena un tā pati - vai ir cipars/vai nav cipars. Doma tā pati tam IFam.

 

bubu, tātad neeskeipot ciparus ir ātrāk nekā pārbaudīt vai tas ir cipars?

 

Bet vienkārši ar is_numeric nepietiek, jo 0043 arī ir cipars. Bet jāglabā ne-cipra laukā, varchar, piemēram. Dubulta pārbaude jāveic! Es kļūdos?

Link to comment
Share on other sites

tajā vietā ne tikai esceipo bet arī liek klāt pēdiņas.

piem šitādā gadījumā:

$db -> sql('select * from t where id in(?)',array(1,2,3,4,5,6,7,8));

nepavisam negribu dabūt šitādu sql

select * from t where id in("1","2","3","4","5","6","7","8")

tāpēc ar skatos vai ir ciparisks.

 

tas ka šitā klase nav pats ātrākais variants kā db kaut ko paprasīt ir skaidrs pats par sevi, bet ērtības prasa upurus.

Link to comment
Share on other sites

×
×
  • Create New...