일반적으로 SQL 쿼리에 문자열을 추가하려면 SQL 쿼리에 추가하기 전에 즉시 이스케이프해야합니다.
PHP 스크립트를 시작할 때 모든 데이터를 이스케이프 처리하여 이스케이프 걱정을하지 않아도된다고 가정합니다.
- 는 당신이 HTML 폼의 입력 요소에 이스케이프 문자열을 추가 발생합니다
SQL 쿼리 문자열은 그 나쁜 설계 방법이기 때문에 거기에 포함되어서는 안된다 탈출? 원래 클라이언트의 문자열이 수정됩니다.
- 이미 이스케이프 된 데이터와 함께 준비된 문을 사용하는 것은 불편하거나 문제가있는 방법입니다.
는 다음 코드를 사용하는 것을 생각 :
// sprintf example:
query('SELECT ... WHERE username="%s"', $unescaped_username);
function query($query_str, $params)
{
if (is_array($params))
{
$params = array_map('filter_SQL', $params);
$query_str = vsprintf($queryStr, $params);
}
else
$query_str = sprintf($query_str ,filter_SQL($params));
mysql_query($query_str);
}
: 당신은 당신의 SQL 쿼리 문자열을 추가 할 때
function init_filter_input($method_array /* $_GET, $_POST, or whatever you wish */)
{
filter_UTF8($method_array); // for a UTF8 encoded string
filter_HTML($method_array);
}
function filter_UTF8($mixed)
{
return is_array($mixed)
? array_map('filter_UTF8',$mixed)
: iconv('UTF-8','UTF-8//IGNORE',$mixed);
}
function filter_HTML($mixed)
{
return is_array($mixed)
? array_map('filter_HTML',$mixed)
: htmlspecialchars(trim($value),ENT_QUOTES);
}
, 당신은 준비된 명령문, 또는의 sprintf를 사용하기로 결정할 수있다
출처
2009-12-07 10:26:28
Dor
데이터베이스에서 두 개의 다른 열을 사용하여 해결할 수 있습니다. 하나는 형식이 지정된 문자열이고 다른 하나는 원래 문자열입니다. – Dor
아니면 그냥 한 열을 포맷하지 않고 오버 헤드 데이터를 건너 뜁니다 ... –
+1 ...하지만 PHP 응용 프로그램은 _supposed_ SQL, PHP 및 HTML의 불가해 한 매시가 될 수 있습니까? –