PDO нужна помощь

1. safasf (13.06.2015 / 19:17)
Помогите пожалуйста,не могу понять,правильно ли я все делаю?Как насчет взлома?
<?php

try {  
	
	$test = new PDO("mysql:host=localhost;port = 3306;dbname=pdonew", 'pdonew', 'pdonew');  
	$test-> setAttribute( PDO::ATTR_ERRMODE, PDO::E RRMODE_EXCEPTION );   
	
}  

catch(PDOException $e) {
	
    print('lol'.$e);  

}

$sth = $sql -> prepare('INSERT INTO `asfas` SET `asfsaf` = ?') -> execute(array(mysql_real_escape_string('as6796*&&^&%^$%#$$*)_))*&*^&%^fsaf')));


?>


Подскажите как можно оптимизировать данный код

Добавлено через 00:39 сек.
И вообще защищен ли он?

2. Иван (13.06.2015 / 19:37)
Здесь есть http://webonrails.ru/post/208650773725188702/ готовое решение, можно посмотреть как там всё реализовано

3. safasf (13.06.2015 / 19:38)
2. Fantik, как-то все через чур аналогично(

Добавлено через 01:26 сек.
2. Fantik, если можешь подскажи,такой код как я использую,можно юзать?

4. Юрий (13.06.2015 / 19:42)
Нет, не так
Либо
$stmt=$pdo->prepare(
    'INSERT INTO asfas SET asfsaf=?'
);
$res=$stmt->execute(
    array('value');
);
Либо вот так
$stmt=$pdo->prepare(
    'INSERT INTO asfas SET asfsaf=:key'
);
$res=$stmt->execute(
    array(
        'key' => 'value',
    );
);

mysql_real_escape не нужен, так как происходит передача через плэйсхолдер, вообще не нужно фильтровать эти данные в таком запросе

Добавлено через 06:10 сек.
Подключение лучше вот так
$dsn="mysql:host=$host;dbname=$db;charset=$charset";
$opt=array(
  PDO::ATTR_ERRMODE            => PDO::E RRMODE_EXCEPTION,
  PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,
);
$pdo=new PDO($dsn, $user, $pass, $opt);


5. safasf (13.06.2015 / 19:51)
4. kndn, Спасибо за помощь,но ты как бы повторил все то,что было до этого,единственное что изменилось это структура D

6. Юрий (13.06.2015 / 19:54)
Убран mysql_real_escape, поправил структуру и тд)
А в остальном все верно))

Добавлено через 03:00 сек.
И второй способ показал.
С ассоциативным массивом

7. safasf (13.06.2015 / 19:59)
6. kndn, тоесть фильтрацию использовать ненадо дедовским способом?тогда как защитить себя?я читал что execute все это делает,но правильно ли использовать запросы для записи и вывода без дедовской защиты?

8. Юрий (13.06.2015 / 20:02)
Да. Фильтрация не нужна в таких запросах.Никакая совсем))
Можешь попробовать подставлять кавычки в запрос и прочее и все будет работать нормально.
В этом и смысл плэйсхолдеров

9. safasf (13.06.2015 / 20:06)
8. kndn, а как же trim htmlspecialchar strsplash?

10. Юрий (13.06.2015 / 20:08)
9. safasf, я тебе ещё раз говорю - при передаче через плэйсхолдер они не нужны. Хочешь почитай об этом в инете

11. Александр (13.06.2015 / 20:46)
9, http://php.net/manual/ru/pdo.prepared-statements.php

URL: https://visavi.net/topics/42414