Безопасное SQL обновление в PHP - PullRequest
1 голос
/ 29 мая 2020

В рамках работы я хочу обновить базу данных с помощью формы. Поскольку база данных велика и используется многими пользователями, я надеюсь, что эта манипуляция по крайней мере безопасна для большей безопасности.

HTML скрипт:

<form action="http://localhost/modifier_infos_signaletique.php" method=POST >
    <div class="id_sign">
    <h5>Id "Signalétique" :</h5>
    <input type="text" name="id_sign" id="id_sign"/><br>
    </div>
    <h5>Infos "Signalétique" : </h5>
    <input class="comment" type="text" id="maj_infos" name="maj_infos" required maxlength='140'/><br>
    <input type="submit" value="Submit" />
</form>

PHP скрипт:

<?php
    $user = 'xxxx'; 
    $pass = 'xxxx';

    try{
        $dbconn = new PDO('pgsql:host=localhost;port=5432;dbname=xxxx',$user, $pass);
        $dbconn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        $maj = $_POST['maj_infos'];
        $id = $_POST['id_sign'];

        $query = $dbconn->prepare("UPDATE signaletique SET infos = ':infos' WHERE id = ':id'");
        $query->bindParam(':infos', $maj, PDO::PARAM_STR);
        $query->bindParam(':id', $id, PDO::PARAM_INT);
        $query->execute();

        echo 'Données mises à jour';
    }
    catch(PDOException $e){
        echo "Erreur : " . $e->getMessage();
    }
?>

Однако, когда я использую этот сценарий, появляется эта ошибка:

** Erreur: SQLSTATE [HY093]: недопустимый номер параметра:: infos **

ошибка может быть связана с параметром, используемым для функции bindParam. Тем не менее, у меня в свойствах моей базы данных PostgreSQL есть информация в разделе «характер меняется». Я попытался изменить этот параметр на «текст», но ошибка осталась прежней.

Простите меня за этот вопрос, но я новичок в PHP, и мои SQL навыки невелики, так как я использую pgAdmin и у него много инструментов для создания и взаимодействия с моими базами данных.

Вот скриншот моей базы данных:

enter image description here

Параметр info находится в «тексте» на снимке экрана, но обычно c это свойство было в «символах различаются» (140).

Спасибо за вашу помощь.

1 Ответ

4 голосов
/ 29 мая 2020

В строке запроса вы заключаете заполнители в одинарные кавычки. Это делает их строками, а не заполнителями. При использовании заполнителей кавычки не требуются.

Это должно работать:
$query = $dbconn->prepare("UPDATE signaletique SET infos = :infos WHERE id = :id");

См. { ссылка } для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...