• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Something is wrong in your syntax obok podczas UPDATE bazy

Object Storage Arubacloud
0 głosów
1,210 wizyt
pytanie zadane 24 października 2018 w PHP przez Śmieszek_;3 Użytkownik (780 p.)

Cześć, podczas aktualizowania bazy danych wyrzuca mi błąd

 

Błąd serweraException: Something is wrong in your syntax obok ''usertitle' = 'yyy' WHERE uid = '1'' w linii 1 in

 

kod

 

try {
		$polaczenie = new mysqli($host, $db_user, $db_password, $db_name);
		if ($polaczenie->connect_errno != 0) {
			throw new Exception(mysqli_connect_errno());
		} else {
			switch($_GET['action']) {
				case "login":
					$action = "login";
					$titleOfChange = "Zmień login";
					$html = '<label>Wprowadź nowy login <input type="text" name="newValue"></label><input type="submit" value="Zatwierdź">';
				break;
				case "email":
					$action = "email";
					$titleOfChange = "Zmień adres e-mail";
					$html = '<label>Wprowadź nowy adres e-mail <input type="text" name="newValue"></label><input type="submit" value="Zatwierdź">';
				break;
				case "avatar":
					$action = "avatar";
					$titleOfChange = "Wybierz nowy avatar";
					$html = 'chwilowo brak';
				break;
				case "signature":
					$action = "signature";
					$titleOfChange = "Edytuj sygnaturę";
					$html = '<label>Twoja sygnatura <textarea type="text" name="newValue"></textarea></label><input type="submit" value="Zatwierdź">';
				break;
				case "title":
					$action = "usertitle";
					$titleOfChange = "Zmień swój tytuł użytkownika";
					$html = '<label>Twój tytuł użytkownika <input type="text" name="newValue"></label><input type="submit" value="Zatwierdź">';
				break;
			}

			echo '<div class="titleOfChange">'.$titleOfChange.'</div>';
			echo $html;

			if (isset($_POST['newValue'])) {
				$newValue = $_POST['newValue'];
				$newValue = htmlentities($newValue, ENT_QUOTES, "UTF-8");
				if ($zapytanie = $polaczenie->query(sprintf("UPDATE users SET '$action' = '%s' WHERE uid = '$userId'",mysqli_real_escape_string($polaczenie, $newValue)))) {
					echo "Zmieniono";
				} else {
					throw new Exception($polaczenie->error);
				}
			}

			
		}
	}
	catch (Exception $e) {
		echo "Błąd serwera".$e;
	}

 

IMO zapytanie wygląda dobrze, ale może to już ta godzina żeby iść spać

2 odpowiedzi

+1 głos
odpowiedź 24 października 2018 przez X3h Dyskutant (9,540 p.)
Możliwe że id jest liczbą
komentarz 24 października 2018 przez Śmieszek_;3 Użytkownik (780 p.)
edycja 24 października 2018 przez Śmieszek_;3
No tak, komórka uid to jest INT, a jak dodałem echo $userId; to wyświetla mi 1 (konto admina, na którym jestem na ID 1) i tak chyba być powinno.

 

Sprawdziłem teraz typ obydwu zmiennych używanych w zapytaniu

$action - string

$userId - string

przekształciłem go na integer $userId = (int) $userId;

ale i tak ciągle ten sam błąd
0 głosów
odpowiedź 24 października 2018 przez Śmieszek_;3 Użytkownik (780 p.)

Rozwiazane, nie wiem dlaczego, ale wystarczyło z zapytania usunąć ' ' ze zmiennych

if ($zapytanie = $polaczenie->query(sprintf("UPDATE users SET $action = '%s' WHERE uid = $userId",mysqli_real_escape_string($polaczenie, $newValue)))) {
					echo "Zmieniono";
				}

 

Dlaczego tak działa? Zmienne nie powinny być w apostrofach?

2
komentarz 24 października 2018 przez Arkadiusz Waluk Ekspert (287,950 p.)
Nie ma znaczenia czy to jest zmienna czy wpisany by był tam tekst. Chodzi o to, że nazwy kolumn wpisujemy albo w ` (nazywany odwróconym apostrofem) albo bez niczego. W cudzysłowy/apostrofy wstawiamy wartości. Inna sprawa, że wartości jeszcze lepiej bindować do zapytania, wtedy mamy pewne zabezpieczenie przed sql injection.
komentarz 25 października 2018 przez Śmieszek_;3 Użytkownik (780 p.)

Nazwa kolumny jest bez niczego, więc chyba dobrze, tylko nie rozumiem dlaczego

te zapytanie zadziałało

"UPDATE users SET $action = '%s' WHERE uid = $userId"

a te nie 

UPDATE users SET '$action' = '%s' WHERE uid = '$userId'"

 

Mógłbyś podać prosty przykład jak w takim razie powinny wyglądać zapytania? Kiedy używać cudzysłowu, apostrofu i czy te kolumny zapisywać w odwróconym apostrofie, czy moga być bez niczego, tak jak w powyższych zapytaniach ?

1
komentarz 25 października 2018 przez Arkadiusz Waluk Ekspert (287,950 p.)

Przecież napisałem, chodzi o nazwę kolumny w apostrofie. W tym, które nie działało, miałeś SET '$action' = ... a w tym które działa masz SET $action = ...

Podobne pytania

0 głosów
1 odpowiedź 1,276 wizyt
+1 głos
2 odpowiedzi 577 wizyt
0 głosów
1 odpowiedź 615 wizyt
pytanie zadane 5 sierpnia 2018 w PHP przez hiveplay Początkujący (430 p.)

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,964 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...