У меня есть следующий метод, который я использую для встраивания видео YouTube на мою страницу:
$body = strip_tags($body); //removes html tags
// $body = mysqli_real_escape_string($this->con, $body);
$check_empty = preg_replace('/\s+/', '', $body); //Deletes all spaces
if($check_empty != "") {
$body_array = preg_split("/\s+/", $body);
foreach ($body_array as $key => $value) {
if(strpos($value, "www.youtube.com/watch?v=") !== false) {
$link = preg_split("!&!", $value);
$value = preg_replace("!watch\?v=!", "embed/", $link[0]);
$value = "<br><iframe frameborder=\'0\' style=\'visibility:visible; border: 1px solid #fff;\' width=\'590\' height=\'315\' src=\'" . $value ."\'></iframe>";
$body_array[$key] = $value;
}
}
$body = implode(" ", $body_array);
Это то, что я использую для ввода в базу данных:
$query = mysqli_query($this->con, "INSERT INTO posts VALUES('', '$body', '$added_by', '$user_to', '$date_added', 'no', 'no', '0', '$imageName')");
$returned_id = mysqli_insert_id($this->con);
Когда я изменяю запрос на оператор подготовки следующим образом:
$no = 'no';
$zero = 0;
$empty = '';
$query = $this->con->stmt_init();
$query->prepare("INSERT INTO posts VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)");
$query->bind_param('issssssis', $empty, $body, $added_by, $user_to, $date_added, $no, $no, $zero, $imageName);
$query->execute();
$returned_id = mysqli_insert_id($this->con);
$query->close();
Мои ссылки на Youtube больше не работают. С регулярным заявлением они вводят в дБ, как это:
<br><iframe width='420' height='315' src='https://www.youtube.com/embed/0EqINqnEa-Y'></iframe><br>
С подготовленным утверждением я получаю это в дБ, а затем, очевидно, ошибку на странице.
<br><iframe frameborder=\'0\' style=\'visibility:visible; border: 1px solid #fff;\' width=\'590\' height=\'315\' src=\'https://www.youtube.com/embed/f_WqYtj1Wik\'></iframe>
Есть мысли о том, как это исправить?