Mam problemy z zapytaniem wstawiania w MySQL. Oto, co chcę zrobić:
W jednym z pól w mojej tabeli chcę wstawić kilka adresów URL i ich tytuły. Buduję to zapytanie w ten sposób:
?content=<title of webpage>%%<url of webpage>%%<title of webpage>%%<url of webpage>%%
I tak dalej, w zależności od liczby adresów URL.
Problem polega na tym, że jeśli adres URL zawiera coś takiego jak „?var=jakaśwartość”, moje zapytanie zostanie przerwane, ponieważ MySQL pomyśli, że deklaruję nową zmienną.
Jak mogę to osiągnąć?
2 odpowiedzi
Myślę, że powinieneś uciec od sekwencji za pomocą \
Jeśli używasz PHP, możesz użyć następującego polecenia (ma wiele form):
Styl proceduralny
string mysqli_real_escape_string ( mysqli $link , string $escapestr )
Styl obiektowy
string mysqli::escape_string ( string $escapestr ) string mysqli::real_escape_string ( string $escapestr )
Oto jak używać symboli zastępczych w PHP (który podejrzewam, że jest językiem, którego używasz)
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);
$name = 'one';
$value = 1;
$stmt->execute();
Pobrałem to z php.net
Symbole zastępcze, korzystające z przygotowanych instrukcji, pełnią kilka funkcji, ale jedną z nich jest bezpieczne oddzielenie danych od kodu, aby zniknął problem, który opisujesz.
Cytując z wyżej wymienionej strony:
Parametry przygotowanych sprawozdań nie muszą być cytowane; kierowca zajmuje się tym automatycznie. Jeśli aplikacja korzysta wyłącznie z przygotowanych instrukcji, programista może mieć pewność, że nie nastąpi wstrzyknięcie SQL (jednak jeśli inne części zapytania są budowane z nieuniknionymi danymi wejściowymi, wstrzyknięcie SQL jest nadal możliwe).
Podobne pytania
Nowe pytania
php
PHP to szeroko stosowany, wysokopoziomowy, dynamiczny, zorientowany obiektowo i interpretowany język skryptowy przeznaczony głównie do tworzenia stron WWW po stronie serwera. Używane w przypadku pytań dotyczących języka PHP.