Benim veritabanları ve web uygulamaları içine benim veri depolamak için daha resmen doğru ve indipendent çözüm arıyorum. Ben birkaç ay içinde bir sürü görüş duydum, ama ben cadı doğru olduğundan emin değilim. Ben bu veritabanında gerçek ve çıkmamış veri depolamak için daha uygun olduğunu düşünüyorum benim webapp daha ölçeklenebilir yapmak için planlama, o ile kabul edilir?
Now I'm using this solution, an example with PHP5, XHTML and MySQLi pseudo-code. I'm using everywhere UTF-8 and no magic_quotes.
Veri işleme:
<?php
// catching data from a simple input form
$id_profile = $_POST['id_profile'];
$details['name'] = $_POST['name'];
$details['text'] = $_POST['text'];
// filter $details
foreach($details as &$item) { $item = trim($item); /* some stuff and other filters but no addslashes() */ }
// Preparing and doing the query
$stmt = $mysqli->prepare("
UPDATE profiles
SET name = ?, text = ?
WHERE id_profile = ? ");
$stmt->bind_param('ssi', $details['name'], $details['text'], $id_profile);
$stmt->execute();
// [...]
Yani benim veritabanında ben gerçek girilen veri yok backslashed var. Ben sayfamda bir noktasında çıkış benim metin (dahil formlar, tablolar, düğmeler, giriş, şifre alanları ve DOM niteliklerini tüm) gerektiğinde Sonra kaçmak için bu küçük işlevi kullanın:
<?php
//a little escape function
function e($s) { return htmlentities($s, ENT_QUOTES, 'UTF-8'); }
// Preparing and doing the query
$stmt = $mysqli->prepare("
SELECT name, text
FROM profiles
WHERE id_profile = ? ");
$stmt->bind_param('i', $_POST['id_profile']);
$stmt->execute();
$stmt->bind_result($name, $text);
?>
<input type="text" id="name" value="<?=e($name) ?>"> <br />
<input type="text" id="text" value="<?=e($text) ?>"> <br />
<table>
<tr>
<td><?=e($name) ?></td>
<td><?=e($text) ?></td>
<td>
Bu, doğru, eksiksiz ve güvenli midir? Bazı suggesions?