@semechki
Я не фрилансер, просто пишу код для себя.

Как записать в базу ссылку?

Доброй ночи, я что-то совсем туплю, ну как обычно :)
Я хотела бы на стороне сервера оборачивать ссылки пользователя которые он ввёл в тег и записывать в базу, но не могу понять как, если делать так:
$text = preg_replace('(https://[\w+?\.\w+]+[a-zA-Z0-9\~\!\@\#\$\%\^\&amp;\*\(\)_\-\=\+\\\/\?\:\;\'\.\/]+[\.]*[a-zA-Z0-9\/]+)', "<a href='$0' target='_blank'>$0</a>", $text);

То MYSQL ругается, пишет что
Ошибка You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ссылка' target='_blank'>ссылка ' at line 2
Вот такие дела, мне нужно чтобы пользователь мог вводить примерно так
vk.com - вот ссылка на мой вк

А уже в базу шла аккуратная ссылка уже в теге
Заранее спасибо за помощь, вы мне очень помогаете)
  • Вопрос задан
  • 1082 просмотра
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Любая ошибка синтаксиса, вызванная передаваемыми в запрос данными говорит о том, что запрос в принципе пишется неверно. А по-старинке, путем запихивания всех переменных прямо в строку запроса.

Так давно уже никто не делает (под "никто" я имею в виду программистов, а не самоучек, которые сами от горшка два вершка, а уже учат других как писать программы, и которых, к сожалению, развелось немыслимое количество, что на тостере, что - самое печальное - на ютубе, так что встретить нормальный код на просторах интернета - это реальная проблема).

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

$sql = "INSERT INTO t (text, author_id) VALUES(?,?)"; // заменим переменные на специальные маркеры
$stmt = $mysqli->prepare($sql); // подготовим запрос к выполнению.
$stmt->bind_param("ss", $text, $author); // привяжем к нему переменные
$stmt->execute(); // и выполним его

три простых шага, а код становится гораздо чище, безопаснее и короче.
причем это в mysqli три, а в PDO вообще два:
$sql = "INSERT INTO t (text, author_id) VALUES(?,?)"; // заменим переменные на специальные маркеры
$stmt = $pdo->prepare($sql); // подготовим запрос к выполнению.
$stmt->execute([$text, $author]); // сразу и привяжем и выполним
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@generate
...
Нужно экранизировать специальные символы
$text = mysqli_real_escape_string($conn, $text); //Для $conn
$text = $mysqli->real_escape_string($text); //Для $mysqli


https://www.php.net/manual/ru/mysqli.real-escape-s...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы