В настоящее время я использую устаревший код для получения данных от пользователей, а именно:
/* retrieve */ $lastName = $_POST['lastName']; $firstName = $_POST['firstName']; $examLevel=$_POST['level']; /* connect */ $dbc=mysql_connect("localhost", "user", "passw") or die('Error connecting to MySQL server'); mysql_select_db("db") or die('Error selecting database.'); /* sanitize */ $lastName=mysql_real_escape_string($lastName); $firstName=mysql_real_escape_string($firstName); $examLevel=mysql_real_escape_string($examLevel); /* insert */ $query_personal = "INSERT INTO personal (LastName, FirstName) VALUES ('$lastName', '$firstName')"; $query_exam = "INSERT INTO exam (Level, Centre, BackupCentre, etc.) VALUES ('$examLevel', '$centre', '$backup', 'etc')";
Это работает, но я продолжаю сталкиваться с предупреждениями о безопасности и отсутствием поддержки. Есть небольшая перезапись для подключения к mysqli вместо mysql, но как насчет mysqli_real_escape_string ? Я видел, как это использовалось в примерах, но я также видел советы использовать вместо этого готовые инструкции, которые не используют mysqli_real_escape_string.
И как я могу использовать подготовленные заявления для INSERT моих данных? До сих пор я немного в море. Например, привязка параметра только для INSERT и привязка результата только для SELECT?
Преобразуйте его в PDO
/* connect */ $dsn = "mysql:host=localhost;db=test;charset=utf8"; $opt = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ); $pdo = new PDO($dsn,"user", "passw", $opt); /* insert */ $query = "INSERT INTO personal (LastName, FirstName) VALUES (?, ?)"; $stmt = $pdo->prepare($query); $stmt->execute(array($_POST['lastName'],$_POST['firstName'])); $query = "INSERT INTO exam (Level, Centre, BackupCentre, etc) VALUES (?, ?, ?, 'etc')"; $stmt = $pdo->prepare($query); $stmt->execute(array($_POST['level'], $centre, $backup));
см. эти страницы для преобразования mysql в mysqli
Converting_to_MySQLi
https://wikis.oracle.com/display/mysql/Converting+to+MySQLi
и см. руководство по mysqli_real_escape_string, которое объясняет о mysqli_real_escape_string
и проблеме безопасности и как ее решить.
php.net:
Безопасность: набор символов по умолчанию
Набор символов должен быть установлен либо на уровне сервера, либо с помощью функции API mysqli_set_charset (), чтобы повлиять на mysqli_real_escape_string (). Дополнительную информацию см. В разделе «Концепции» на наборах символов .
см. эту страницу для запроса данных вставки
см. эту страницу для подготовки данных для вставки в mysql
и http://php.net/manual/de/mysqli.quickstart.prepared-statements.php