• 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

VPS Starter Arubacloud
0 głosów
1,177 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,550 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,550 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,248 wizyt
+1 głos
2 odpowiedzi 525 wizyt
0 głosów
1 odpowiedź 613 wizyt
pytanie zadane 5 sierpnia 2018 w PHP przez hiveplay Początkujący (430 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...