Как безопасно обновлять и извлекать строки, используя подготовленный оператор mysqli? - PullRequest
0 голосов
/ 30 октября 2018

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

Я подумал, что использование подготовленного оператора с параметрами для оператора Update SQL и оператора Select будет автоматически экранировать и удалять специальные символы соответственно. Кажется, этого не происходит. Подготовленное утверждение все еще портит апостроф из-за того, что утверждение искажено из-за апострофа.

Я работаю над этим, используя mysqli_real_escape_string в моих строках перед обновлением, но когда я получаю строки, используя другой подготовленный оператор (выберите с одним параметром), экранированный апостроф отображается в тексте на html-странице (например: / 'hello /' вместо «привет»).

Так что я использую полоски. Это работает, но я думал, что подготовленные MySQL заявления сделали это для вас. Есть идеи?

Обновление:

$mysqli = new mysqli($servername, $username, $password, $dbname);   
if ($mysqli->connect_error) {
    die("Connection failed: " . $mysqli->connect_error);
} 
$sql = "UPDATE table SET mycol= ? WHERE myparam= ?";
$stmt = $mysqli->prepare($sql); 
$stmt->bind_param('ss', $mycol, $myparam);
if (!$stmt->execute()) { 
       echo "Error updating record: " . $stmt->error;                                  
}

Получить:

$mysqli = new mysqli($servername, $username, $password, $dbname);                           

if($mysqli->connect_error)
{
    die("$mysqli->connect_errno: $mysqli->connect_error");
}

$sql= "Select * From table Where myvar= ?";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("s", $myparam);
$stmt->execute();
$stmt_result = $stmt->get_result();

if ($stmt_result->num_rows>0) {
    $row = $stmt_result->fetch_assoc();    }

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Извините, что беспокою людей!

Подготовленное утверждение работает как задумано, и мне не нужно использовать mysqli_real_escape_string.

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

Спасибо всем, кто откликнулся!

0 голосов
/ 30 октября 2018

Используйте функцию «mysqli_real_escape_string», чтобы избежать угроз безопасности.

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