Я использую форму для обновления данных, отображаемых на сайте. Это просто текстовая информация, но она будет содержать апострофы и кавычки.
Я подумал, что использование подготовленного оператора с параметрами для оператора 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(); }