2015-11-30 4 views
0

Я пытаюсь создать динамическую ссылку, которая изменяет запрос базы данных в зависимости от идентификатора элементов.Динамический запрос с использованием PHP, MYSQL

Таким образом, если вы нажмете на ссылку, где «ID = X», вы перейдете на следующую страницу, на которой отображается дополнительная информация об этом элементе. Вот код для ссылки на моей странице индекса:

<a href="details.php?ID= <?php print $row['ID']?> "> Click here </a>

Который работает отлично. Проблема, кажется, в моем WHERE заявление, по какой-то причине

<?php $myQuery = "SELECT * FROM test"; 
     $myQuery .= "WHERE ID=" . $_GET['ID']; 

$result = $con->query($myQuery); 
`if (!$result) die('Query error: ' . mysqli_error($con)); ?> 

И здесь я отобразить элементы этого конкретного элемента базы данных ...

<?php 

while($row = mysqli_fetch_array($result)) 
{ 
?> 
     <?php print $row['image'] ?>  
     <?php print $row ['ID']?> 
     <?php print $row['description'] ?> 

<?php 
} 
?> 

Например, когда я нажимаю на элемент с ID = 1 он выдает сообщение об ошибке «Ошибка запроса: у вас есть ошибка в синтаксисе SQL», проверьте руководство, соответствующее версии сервера MariaDB, для правильного синтаксиса для использования рядом с «= 1» в строке 1 »

Я действительно новичок во всем этом, и это моя первая публикация на t его сайт, так что было бы очень здорово, если бы кто-то может помочь мне .. спасибо

+1

Пара отмечает. Во-первых, у вас нет места между именем вашей таблицы и WHERE. Во-вторых, используйте параметризованные запросы/подготовленные инструкции вместо того, чтобы конкатенировать ваши значения в SQL-запросы, открывающие вас для SQL-инъекций. –

+0

Спасибо, что указали это. Не очень знакомы с подготовленными заявлениями, но я обязательно буду смотреть на него до того, как сайт начнет жить – 92smallwizards

ответ

1

Вашего запрос будет теперь SELECT * FROM testWHERE ID=..

Там должен быть пространством между имя_таблицей и WHERE заявлением.

+0

СПАСИБО !!! Буквально смотрел на это в течение последних 3 часов. – 92smallwizards

0

Я думаю, что это ясно, и менее подвержены ошибкам, если вы пишете код, как это:

<?php $myQuery = " 
     SELECT * 
     FROM test 
     WHERE ID= $_GET['ID']; 
"; 
... 

хотя, в производстве вы бы использования курса подготовленные заявления

+0

Пока не натолкнулись на подготовленные заявления. Определенно, что-то, к чему я должен обратиться. Из того, что я только что прочитал, где вы предварительно определяете и сохраняете часть запроса, а затем добавляете оставшуюся информацию позже перед выполнением? – 92smallwizards

+0

Да. Это более безопасно. Но это может усложнить ситуацию, когда ошибки возникают в коде разработки. – Strawberry

0

Добавив, что пространство в вашем SQL будет исправлять ваш запрос как есть, но, как говорили другие, ваш код не является безопасным, и вместо этого вы должны использовать подготовленные инструкции. Когда вы переключитесь на подготовленные заявления, ваш запрос снова сломается из-за дополнительного места, которое вы добавили в ссылку. Чтобы исправить его правильно ...

1) Удалите все лишнее белое пространство в ссылке.

<a href="details.php?ID=<?php print $row['ID']?>"> Click here </a> 

2) Использованные подготовленные отчеты: see here.

Смежные вопросы