# Koenig (11.05.2015 / 14:09)
подготовленные выражения не экранируют данные, я бы специально экранировал, потом будет меньше проблем с мускулдампом
Не данные, а ключевые слова (имена таблиц, полей). Данные за плейсхолдерами они как раз экранируют.
Swank, PDO::quote
можешь проверить через пма, так как я проверял на mysqli
L!MP, имена полей баз и тд ведь нельзя в плэйсхолдеры же загонять
L!MP, Так мне всеже не надо не чего экранировать?
Swank, проверь через пма, записать так и так
Swank, данные которые вставляются в запрос по плейсхолдерам не нужно экранировать. Они экранируются самим PDO.
$stmt = $pdo->prepare('select * from users where id = ?');
$stmt->execute([$user_id]);
L!MP, провел тест, prepare не экранирует
$db_host = 'localhost';
$db_user = 'root';
$db_pass = '';
$db_name = 'annimon';
$db_charset = 'utf8';
try
{
$dbh = new PDO('mysql:host=' . $db_host . ';dbname=' . $db_name, $db_user ,$db_pass);
echo 'Connected';
}
catch (Exception $e)
{
echo 'Unable to connect: ' . $e->getMessage();
}
$sth = $dbh->prepare("INSERT INTO `forum` SET `refid` = ?, `type` = ?, `time` = ?, `user_id` = ?, `from` = ?, `ip` = ?, `soft` = ?, `text` = ?");
$refid = 6787;
$type = 'm';
$time = time();
$user_id = 1314;
$from = 'Koenig';
$ip = $_SERVER['SERVER_ADDR'];
$soft = $_SERVER['HTTP_USER_AGENT'];
$text = '' . $dbh->quote(file_get_contents('test.html') . '
');
$sth->execute(array($refid, $type, $time, $user_id, $from, $ip, $soft, $text));
$text = '' . file_get_contents('test.html') . '
';
$sth->execute(array($refid, $type, $time, $user_id, $from, $ip, $soft, $text));
prepare спасает от инъекций, так как неэкранированные данные уже подставляются в заготовленный шаблон, потому экранирование не нужно, как не крути оно воткнет все что написали