2013-08-01 2 views
0

У меня есть следующий SQL заявление ..MYSQL заявление не вторя правильно

$sql = "select tableid, comment, ID, description from reservations 
     where uniqueid = '" . $reservationid . "'"; 

$ передаются Идентификатор резервирования через форму POST. Очень похожее заявление с разными выбранными полями отлично работает на другой странице. Но когда я эхо SQL заявления на странице я получаю

select tableid, comment, ID, description 
from reservations 
where uniqueid = '51e5f949c1828' 

кажется, пропустить последний сингл цитаты

Я также попытался

$sql = "select tableid, comment, ID, description from reservations 
     where uniqueid = '$reservationid'"; 

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

select tableid, comment, ID, description from reservations 
where uniqueid = '51e5f949c1828</form 

где на земле является то, что бродячая </form> часть приходит?

+0

вы можете размещать код образца –

+0

Вы должны использовать подготовленные заявления * * в конце концов. –

+1

Отправьте свой код. В sql нет ошибки. Возможно, вы не закрыли двойные кавычки или одинарные кавычки где-то в форме –

ответ

1

Но когда я эхо SQL заявления на странице я получаю

select tableid, comment, ID, description from reservations where uniqueid = <'51e5f949c1828 

Если вы «эхо» в окно браузера, есть большие шансы, что браузер переместился </form> из дисплей. Моя ставка - если вы посмотрите на исходный код своей страницы, пока вы видите запрос, вы увидите также ... where uniqueid = '51e5f949c1828</form>.

Как вы уверены, $reservationid содержат то, что вы ожидаете?

Не могли бы вы показать еще какой-нибудь код. Как ваша html-форма? Вероятно, есть некорректные html и/или закрытые кавычки.

Кстати, вы никогда не должны вводить переменную из ненадежного источника в запрос. Это приводит к SQL injection.

+0

Вы верны! Был бродячий тег, пришедший в форме, которую удалил браузер, когда я повторил эту переменную. Я собираюсь предпринять шаги для решения проблем с SQL-инъекциями. – user2522177

0

Использование sprintf() - это лучший способ для таких вещей, как объединение строк.

0

Я думаю, что у вас есть одна и две кавычки, смешанные.

$sql = "select tableid, comment, ID, description from reservations where uniqueid = "' . $reservationid . '""; 
1

Возможно, у вас есть какая-то ошибка в вашей форме. Исправленные данные заканчиваются неправильно, и поэтому часть формы html отправляется вместе с ней. Не могу сказать, если вы не опубликуете, как вы отправляете данные. Вам нужно будет исправить это, чтобы код работал.

Нет ничего плохого в PHP, который вы отправили, однако это простая цель для SQL-инъекций и т. Д. Поэтому лучше использовать, например, sprintf. http://php.net/manual/en/function.sprintf.php

0

вы также можете сделать запрос, как этот

$sql = "select tableid, comment, ID, description 
     from reservations where uniqueid = '$reservationid'"; 

или просто

$sql = "select tableid, comment, ID, description 
     from reservations where uniqueid = $reservationid "; 
Смежные вопросы