БД сама добавляет & (барабашка)

Есть вот такая строка:

2854693asdrvbh!)>%&#^"<dff\:'-=~

Перед записью в базу прогоняю эту строку через функцию:

function prep_data($m, $p) {
    $a = trim($p);
    $a = mysqli_real_escape_string($m, $a);
    $a = quotemeta($a);
    $a = htmlentities($a, ENT_QUOTES, 'UTF-8');
    return $a;
}
$str = prep_data($mysqli, "2854693asdrvbh!)%&#^"dff\:'-=~");

После прохода через функцию строка имеет такой вид в var_dump():

2854693asdrvbh!\)%&#\^\\"dff\\\\:\\'-=~

И в таком вот виде я отправляю эту строку в базу данных таким вот способом:

function add($p1) {
    global $mysqli;
    $sql = mysqli_prepare($mysqli, "INSERT INTO test (name) VALUES(?)");
    mysqli_stmt_bind_param($sql, "s", $p1);
    mysqli_stmt_execute($sql);
    mysqli_stmt_close($sql);
}
add("2854693asdrvbh!\)%&#\^\\"dff\\\\:\\'-=~");

И в итоге в базе имеется запись этой строки в таком вот виде:

2854693asdrvbh!\)%&amp;#\^\\&quot;dff\\\\:\\&#039;-=~

Как видим запись произошла с дополнительной заменой амперсандов

//это 
&
//поменялось на это 
&amp;

Где зарыт барабашка и как от этого избавиться или что делать вообще подскажите пожалуйста?

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


Ответы (1 шт):

Автор решения: Arasaki

Я лично открыл для себя Америку с этим вопросом) Или я перегрелся)

Весь мой функционал расписанный в вопросе ВЕРНЫЙ.

Несмотря на то, что значения в базе лежат с дополнительной обработкой амперсандов, при сравнении строка после функции и строка из базы БУДУТ ВЕРНЫ (true, true, true!!!).

→ Ссылка