Решил потихоньку переходить на PHP PDO и возник такой вопрос, есть ли смысл использовать функцию mysql_real_escape_string в PDO запросах?
Дело в том, что пока не получается это сделать, т.к. эта функция используется только при активном соединении с БД и если даже прогонять непосредственно в execute, то выдает ту же ошибку с подключением к БД.
Или можно просто использовать подготовленные запросы и этого будет достаточно для защиты от sql инъекций?
Спустя 1 час, 9 минут, 58 секунд (28.01.2012 - 19:25) Winston написал(а):
mysql_real_escape_string будет работать только при традиционном соединении mysql_connect
А для PDO лучше делать так
Об остальном позаботится PDO.
А для PDO лучше делать так
$sql = "INSERT INTO table (field1, field2) VALUES (?, ?)";
$sth = $dbh->prepare($sql);
$sth->execute(array($var1, $var2));
Об остальном позаботится PDO.
Спустя 38 минут, 26 секунд (28.01.2012 - 20:04) IPnex написал(а):
Цитата (Winston @ 28.01.2012 - 19:25) |
mysql_real_escape_string будет работать только при традиционном соединении mysql_connect А для PDO лучше делать так <pre class="sh_sourceCode" rel="php"><span class="sh_variable">$sql</span> <span class="sh_symbol">=</span> <span class="sh_string">"INSERT INTO table (field1, field2) VALUES (?, ?)"</span><span class="sh_symbol">;</span> <span class="sh_variable">$sth</span> <span class="sh_symbol">=</span> <span class="sh_variable">$dbh</span><span class="sh_symbol">-></span><span class="sh_function">prepare</span><span class="sh_symbol">(</span><span class="sh_variable">$sql</span><span class="sh_symbol">);</span> <span class="sh_variable">$sth</span><span class="sh_symbol">-></span><span class="sh_function">execute</span><span class="sh_symbol">(</span><span class="sh_function">array</span><span class="sh_symbol">(</span><span class="sh_variable">$var1</span><span class="sh_symbol">,</span> <span class="sh_variable">$var2</span><span class="sh_symbol">));</span></pre> Об остальном позаботится PDO. |
А если так:
$sql = "INSERT INTO table (field1, field2) VALUES (:var1, :var2)";
$sth = $dbh->prepare($sql);
$params = array (':var1' => $var1, ':var2' => $var2);
$sth->execute($params);
Спустя 3 минуты, 44 секунды (28.01.2012 - 20:08) Игорь_Vasinsky написал(а):
суть не в этом. тебе ответили - в PDO SQL инъекции отловятся в самой PDO
Спустя 48 секунд (28.01.2012 - 20:08) Winston написал(а):
Цитата (IPnex @ 28.01.2012 - 19:04) |
А если так: |
Можно и так.
Так даже более понятно, визуально, что к чему.