Błąd SQL: nieprawidłowa konstrukcja zapytania SQL

0

Mam taki błąd

Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 in C:\xampp\htdocs\dodaj.php:27 Stack trace: #0 C:\xampp\htdocs\dodaj.php(27): PDO->query('SELECT * FROM \...') #1 {main} thrown in C:\xampp\htdocs\dodaj.php on line 27`

a tu jest fragment kodu
pobierz, plaintext

if(!isset($_GET['j_autor']))
{
	$ksiazka['autor1'] = 'BRAK';
}
else
{
//27 linijka
	$stmt = $db->query("SELECT * FROM `s_autor` WHERE id_autor = ".$_GET["j_autor"]);
    foreach($stmt as $row)
    {
        $ksiazka['autor1'] = $row['nazwisko_autora'].'  '.$row['imie_autora'];
		$ksiazka['1autor'] = $row['id_autor'];
    }

Pomoże ktoś?

0

Może trzeba umieścić id autora w pomiędzy apostrofy?

EDIT: Jeżeli jest to tekst

0

spróbuje
@Edit: nie działa nadal

0

Masz kropkę przed $_GET["j_autor"],zresztą nie prościej zrobić jakąś zmienną w kodzie typu
$sautor=$_GET["j_autor"]
, brzydko to wygląda,tak mi się wydaję,że to przez to,ale nie jestem pewny.

0

tylko że bez tej kropki nie połączę zmiennej z tekstem (zapytaniem SQL)

2

$stmt = $db->query("SELECT * FROM s_autor WHERE id_autor = ".$_GET["j_autor"]

weź sprawdź przy okazji, czy twój kod nie jest podatny na SQL-injection.

0

o to się nie martw jest wyżej sprawdzany ja daje tylko wycinki kodu

0

Pokaż to sprawdzanie, bo mam wrażenie, ze nie rozumiesz istoty pdo.

0

To co napisał @LukeJL jest dobre już działa

0

I w jaki sposób zabezpieczasz to przez sql inje?

0

bo to jest wyciągane dane z bazy oraz są tam tylko pola wyboru

0
Krzy Ma napisał(a):

bo to jest wyciągane dane z bazy oraz są tam tylko pola wyboru

I rozumiem że w jakiś sposób zrobiłeś że ktoś nie może zmieniać adresu URL i parametrów GET ?

0

Może tak będzie łatwej: http://www.poradnik-webmastera.com/artykuly/bazy_danych/sql_injection.php
Lektura do poduszki

0

część danych idzie get a część post i za pomocą post wrażliwe są weryfikowane

0

to i tak jest zła praktyka.

W PDO jest coś takiego jak prepared statements, z których powinieneś korzystać. Poza tym używaj quote (http://php.net/manual/pl/pdo.quote.php), bo to ta funkcja jest odpowiedzialna za walidację. Nie rób tego co już ktoś zrobił i było to sprawdzone przez miliony.

1 użytkowników online, w tym zalogowanych: 0, gości: 1