Код здесь по-прежнему неполный, потому что я все еще собираюсь спросить вас, ребята, о правильном формате / синтаксисе использования escape-строки mysql. Я все еще новичок в php, и я хочу узнать, как избежать инъекций sql. Правильно ли этот код?
$con = mysql_connect("localhost","root","mypwd"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("Hospital", $con); $sqlque="INSERT INTO t2 (HOSPNUM, ROOMNUM, ADATE, ADTIME, LASTNAME, FIRSTNAME, MIDNAME, CSTAT, AGE, BDAY, ADDRESS, TELNUM, SEX, STAT, STAT2, STAT3, STAT4, STAT5, STAT6, STAT7, STAT8, NURSE) VALUES ('$_POST[hnum]', '$_POST[rnum]', '$_POST[adate]', '$_POST[adtime]', '$_POST[lname]', '$_POST[fname]', '$_POST[mname]', '$_POST[cs]', '$_POST[age]', '$_POST[bday]', '$_POST[ad]', '$_POST[telnum]', '$_POST[sex]', '$_POST[stats1]', '$_POST[stats2]', '$_POST[stats3]', '$_POST[stats4]', '$_POST[stats5]', '$_POST[stats6]', '$_POST[stats7]', '$_POST[stats8]', '$_POST[nurse]')"; mysql_real_escape_string($_POST[hnum]), mysql_real_escape_string($_POST[rnum]); mysql_real_escape_string($_POST[adate]);
Вам нужно будет избежать значений, прежде чем помещать их в запрос:
$hnum = mysql_real_escape_string($_POST['hnum']); $query = "INSERT ... VALUES('$hnum')";
Если у вас много значений, вы можете их перебрать:
$values = $_POST; foreach ($values as &$value) { $value = mysql_real_escape_string($value); } $query = "INSERT ... VALUES('$values[hnum]')";
Вы используете mysql_real_escape_string для переменных AFTER, вставляя их в строку!
Вы хотите сделать
$hnum = mysql_real_escape_string($_POST[hnum]), $rnum = mysql_real_escape_string($_POST[rnum]); $adate = mysql_real_escape_string($_POST[adate]); $sqlque="INSERT INTO t2 (HOSPNUM, ROOMNUM, ADATE, ADTIME, LASTNAME, FIRSTNAME, MIDNAME, CSTAT, AGE, BDAY, ADDRESS, TELNUM, SEX, STAT, STAT2, STAT3, STAT4, STAT5, STAT6, STAT7, STAT8, NURSE) VALUES ($hnum,$rnum,$adate', //etc.
Еще лучше, не создавайте SQL-запросы из подстановки строк вообще. Я предлагаю использовать PDO и подготовленные операторы / параметризованные запросы. Подготовленное заявление заботится о том, чтобы избежать входа для вас. Вот хорошая ссылка с изложением того, как использовать PDO вместо команд mysql_ *.
вам нужно использовать эту функцию следующим образом:
....VALUES (".mysql_real_escape_string('$_POST[hnum]').",...