PHP / MySQL - запрос не выполняется, если вместо жестко заданного значения используется переменная - PullRequest
1 голос
/ 29 апреля 2011

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

Это мой запрос:

$bugzilla_query="SELECT * FROM profiles WHERE userid='".$bugzilla_id."'";

Я получаю значение cookie, выполнив следующие действия:

$bugzilla_id = $_COOKIE["Bugzilla_login"];

Я начинаю сомневаться, что запрос неверен, но переменная, содержащая значение cookie, не получает его правильно, даже еслиэто выглядит правильно, но с другой стороны, если я установлю $bugzilla_id = 642;, оно все равно не будет работать, но если я сделаю $bugzilla_query="SELECT * FROM profiles WHERE userid=642";, оно будет отлично работать.

Хм, смущенно!

Ответы [ 3 ]

3 голосов
/ 29 апреля 2011

В общем, вы никогда не хотите помещать любое значение, которое может быть изменено пользователем, непосредственно в запрос.Кроме того, если предполагается, что это число, почему вы помещаете его в одинарные кавычки в запросе с включенной переменной, а не в жестко закодированном?Заметили разницу?Попробуйте это:

$bugzilla_query = sprintf("SELECT * FROM profiles WHERE userid = %d", $bugzilla_id);

Это убедится, что оно приведено как целое число, прежде чем перейти к вашему запросу.

1 голос
/ 29 апреля 2011

Если $ bugzilla_id должен быть целым числом, попробуйте обернуть его в intval (), чтобы убедиться, что оно передается как целое число.

0 голосов
/ 02 мая 2011

Большое спасибо за вашу помощь.Оказывается, это была глупая опечатка, которую я сделал в своем коде:

У меня было:

if ($bugzilla_id <= 0 || $bugzilla_id = '' || !isset($bugzilla_id))
{
     return "No Bugzilla cookie is set!";
}    

Когда мне явно нужно было:

if ($bugzilla_id <= 0 || $bugzilla_id == '' || !isset($bugzilla_id))
{
    return "No Bugzilla cookie is set!";
}    

Я устанавливал $bugzilla_id до '', потому что я пропустил = в проверке сравнения.

Мой совет для этого - и я могу начать делать это сам - должен был бы поместить переменную справа, поэтому напишитеваши сравнения наоборот, тогда он сразу же потерпит неудачу.По совпадению я прочитал на собственном веб-сайте Джоэла, что он видит это как признак хорошего программиста: /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...