Как предотвратить SQL-инъекцию?

В настоящее время я использую следующий запрос вставки для обновления значений в mysql, используя php:

$UpdateQuery = "UPDATE `mysqldb`.`cu_data` SET `app_status` = '".$_POST['Est']."', `nacionalidad` = '".$_POST['Nac']."', `ciudad_ini` = '".$_POST['CiudadI']."', `ciudad_ent` = '".$_POST['CiudadE']."', `ciudad_dest` = '".$_POST['CiudadD']."', `ciudad_land` = '".$_POST['PEntrada']."', `uso_consr` = '".$_POST['U_Abog']."', `start` = '".$_POST['Envi']."', `t1` = '".$_POST['Cob']."', `t2` = '".$_POST['Acus']."', `t3` = '".$_POST['Invit']."', `t4` = '".$_POST['Entre']."', `t5` = '".$_POST['Recibo']."', `t6` = '".$_POST['EnvioF)']."', `t7` = '".$_POST['DatInternet']."', `t8` = '".$_POST['SoliMed']."', `t9` = '".$_POST['OrdeMe']."', `t10` = '".$_POST['SoliciPasa']."', `t11` = '".$_POST['EnvioPasas']."', `t12` = '".$_POST['RecepPasa']."', `end` = '".$_POST['Landing']."', `Notas` = '".$_POST['Notas']."', `LastChange` = NOW() WHERE `cu_data`.`procid` = '".$_POST['Proceso']."' AND `cu_data`.`userid` = '$userid' "; $result = mysqli_query($con, $UpdateQuery); 

Код работает, но теперь я беспокоюсь о sql inyections (не только о плохом виде, но и о таких вещах, как пользователь, включая полуточку в любом из полей формы)

Я думал использовать какое-то ускорение с помощью mysql_real_escape_string (как это было предложено в sencond большинству голосовавших ответов на этот вопрос ), но затем я вижу некоторые подводные камни в комментариях (и мне трудно понять самый проголосовавший).

какие-нибудь советы?

заранее спасибо

Ps: По крайней мере, для последнего поля (примечания) мне нужно, чтобы пользователь вводил любые символы, такие как ($ #%;:,.>

Отредактировано:

Я посмотрел на предложенный ответ (извините, что у меня было плохое отношение к другому ответу SO в исходном вопросе). Итак, чтобы не дублировать, могу ли я спросить о том, как сделать PDO в вопросе обновления, как тот, который я показываю выше? (Мой php из mysql_ дней!)

Отредактировано (2): Хорошо, поэтому этот вопрос отмечен как дубликат, но я не согласен с выбранным ответом (тот, который отображается после этого вопроса уже имеет ответ здесь: так как это тот, который я прочитал, прежде чем задавать этот вопрос Я нашел еще один, который выглядит более интересным (по крайней мере, для меня) здесь: Замена функций mysql_ * с помощью PDO и подготовленных операторов (конечно, это начинает иметь смысл, если вы знаете о объектах данных PHP, иначе PDO, который я не было

Отредактировано (3): Ну, я получил это, чтобы работать следующим образом:

  $UpdateQuery1 = "UPDATE `mysqldb`.`cu_data` SET `app_status` = ?, `nacionalidad` = ?, `ciudad_ini` = ?, `ciudad_ent` = ?, `ciudad_dest` = ?, `ciudad_land` = ?, `uso_consr` = ?, `start` = ?, `t1` = ?, `t2` = ?, `t3` = ?, `t4` = ?, `t5` = ?, `t6` = ?, `t7` = ?, `t8` = ?, `t9` = ?, `t10` = ?, `t11` = ?, `t12` = ?, `end` = ?, `Notas` = ?, `LastChange` = NOW() WHERE `cu_data`.`procid` = ? AND `cu_data`.`userid` = ?"; $stmt = $con->prepare($UpdateQuery1); $stmt->bind_param('ssssssssssssssssssssssss', $_POST['Estatus'],$_POST['Nacionalidad'],$_POST['CiudadI'],$_POST['CiudadE'],$_POST['CiudadD'], $_POST['PEntrada'],$_POST['Uso_Abog'],$_POST['Envi'],$_POST['Cobro_de_Fee'], $_POST['Acus'],$_POST['Invit'],$_POST['Entre'],$_POST['Recibo'],$_POST['EnvioF'], $_POST['DatInternet'],$_POST['SoliMed'],$_POST['OrdeMe'],$_POST['SoliciPasa'], $_POST['EnvioPasa'],$_POST['RecepPasa'],$_POST['Landing'],$_POST['Notas'], $_POST['Proceso'],$userid); $stmt->execute(); 

В качестве бонуса мое поле Notas, похоже, умеет хранить любой текст без необходимости избегать специального символа

Solutions Collecting From Web of "Как предотвратить SQL-инъекцию?"