Я начал изучать начало кодирования с помощью HTML, CSS и php. Я создал базовую форму, чтобы проверить свое мастерство. Тем не менее, я застрял в этом. Можете ли вы мне помочь?
Я знаю, что он открыт для SQL-инъекций, я просто пытаюсь улучшить себя в кодировании и буду использовать подготовленные заявления и параметризованные запросы в реальной жизни.
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$mysql_host = "";
$mysql_username = "";
$mysql_password = "";
$mysql_database = "";
$conn = new mysqli ($mysql_host, $mysql_username, $mysql_password, $mysql_database);
$c_name = $_POST["club_name"];
$c_league = $_POST["league"];
$c_rank = $_POST["ranking"];
$c_prank = $_POST["previous_rank"];
$sql = "INSERT INTO 'club_data' ('club_name', 'league', 'ranking', 'previous_rank')
VALUES ('$c_name', '$c_league, $c_rank, $c_prank);";
mysqli_query($conn, $sql);
if ($conn->query($sql) === TRUE) {
echo "kayit islendi";
}
else {
echo "Error". $sql ."<br>". $conn->error;
}
$conn->close();
}
?>
Каждый раз, когда я использовал форму, я получил эту ошибку.
Ошибка INSERT INTO... и т.д.
Вам не хватает котировок вокруг ваших значений вставки, здесь фиксированный sql:
$sql = "INSERT INTO 'club_data' ('club_name', 'league', 'ranking', 'previous_rank')
VALUES ('$c_name', '$c_league', '$c_rank', '$c_prank');"
Вам не хватало котировок вокруг каждого значения!
ОДНАКО, это плохой способ создания запросов к базе данных в производстве. Либо используйте mysqli_real_escape_string
для дезинфекции ваших строк (каждая из ваших переменных будет нуждаться в этом лечении) или использовать подготовленные заявления.
В качестве альтернативы и способ, которым вы всегда должны использовать свою БД, - это оболочка PDO. В этом случае вы будете использовать: PDO::quote
. PDO предлагает унифицированный интерфейс для самых популярных баз данных. Здесь вы можете узнать больше о PDO: http://php.net/manual/en/book.pdo.php
Кодеры предпочитают подготовленные заявления для дезинфекции своих вкладов. Однако это приводит к дополнительной связи с сервером mysql и написанию еще немного кода в php. Подготовленные утверждения в большей степени задействованы, чем обычные запросы, поскольку они кэшируются на SQL-сервере и предварительно обрабатываются ожиданием использования данных, а также с мириадными вопросительными знаками делает код очень трудным для чтения, особенно если вы начинаете работать на производстве и имеете мириад столбцов для заполнения. Здесь вы можете прочитать больше о подготовленных заявлениях: https://dev.mysql.com/doc/refman/5.7/en/sql-syntax-prepared-statements.html
Основной вынос:
mysqli_real_escape_string
или PDO::quote
или подготовленные заявления, в зависимости от ситуации.INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
Подробнее читайте здесь: https://dev.mysql.com/doc/refman/5.7/en/insert.html. Это предостережение в том, что максимальный размер sql с вставленными значениями никогда не должен быть больше, чем max_allowed_packet
config.Вы должны использовать подготовленные заявления. Это не только предотвращает атаки SQL-инъекций, но и позволяет избежать проблем с цитированием, с которыми вы в настоящее время сталкиваетесь
$sql = "INSERT INTO 'club_data' ('club_name', 'league', 'ranking', 'previous_rank')
VALUES (?, ?, ?, ?);";
$result = $conn->prepare($sql);
$result->bind_param('ssss', $c_name, $c_league, $c_rank, $c_prank);
echo $result->execute() === true ? 'kayit islendi' : 'Error'.$conn->error;
$sql
, у вас проблема с кавычками