PHP / MYSQL: что не так с моей переменной Query / PHP в запросе - PullRequest
2 голосов
/ 18 ноября 2011

Я программирую на PHP и MySQL уже около года и довольно хорошо это освоил; построение действительно сложных запросов с объединениями и вычисляемыми полями и всеми остальными радостями MySQL в течение нескольких месяцев не было для меня проблемой.

НО есть что-то синтаксически странное в следующем фрагменте кода, который я не могу понять - хотя он невероятно прост и, что еще более раздражает, тесно связан с другими частями проекта, над которым я работаю ( и который работает без нареканий).

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

Если у кого-то есть какие-либо предложения, я был бы полностью благодарен, потому что я начинаю сходить с ума.

Проблема:

Я действительно схожу с ума по этому поводу, поэтому, пожалуйста, не смейтесь, когда увидите код:

$query="SELECT count(somefield) FROM db_name WHERE otherfield='".$myvariable."'";

Мой запрос не находит результатов при использовании определенной переменной в качестве части поиска по полю, хотя я знаю, что в базе данных содержится более 900 записей, которые должны совпадать.

Bugchecking:

  • Поскольку я знаю значение переменной, которую я передаю в запрос, я попытался жестко закодировать его в запросе, и он работает нормально.
  • Я запустил запрос в консоли MySQL (опять же, конечно, жестко запрограммированный вместо переменной), и он отлично работает.
    • На мой взгляд, эти два факта исключают вероятность того, что в версии запроса PHP есть что-то синтаксически неправильное.
  • Чтобы устранить все возможные проблемы с подключением к базе данных и убедиться, что проблема не связана с итерацией возвращаемых результатов, вместо того, чтобы пытаться получить реальные результаты, я изменил свой исходный запрос, чтобы он возвращал только счетчик результатов и включили стандартные операторы or die(mysql_error()) во время последовательности соединений. Запрос выполняется, но находит 0 результатов, что исключает вероятность возникновения проблемы с подключением.
  • Я проверил, что поле, которое я проверяю, является правильным полем для информации, которую я ищу (как я уже сказал, она работает нормально, если я жестко закодировал переменную в запросе ... что, конечно, не будет вариант в готовом коде).
  • Я проверил тип переменной, прежде чем пытаться передать ее в запрос (возможно, подумав, потому что она извлечена из возвращенного xml ранее в скрипте, что, возможно, она отображалась как массив или что-то в этом роде). Это напечатано как строка.
  • Я проверил, что переменная отформатирована так, как я ожидаю, что она будет найдена в базе данных; Ступенька и др.
  • Я пытался использовать LIKE '%".$myvariable."'"; все еще без игры в кости.

У кого-нибудь есть предложения о том, что я могу сделать, чтобы выяснить, что, черт возьми, происходит не так? Большое спасибо!

Ответы [ 5 ]

1 голос
/ 18 ноября 2011

Большое спасибо всем, кто пытался помочь, но я понял это через несколько часов после публикации: Первая проблема состояла в том, что я забыл использовать mysql_real_escape_string ($ myvariable) ... причины того, как и почему я забыл, многообразны , но это так.

Итак, после того, как я снова подключил этого парня (который, как я предполагал, был в этом конкретном модуле моего кода, в первую очередь, но это то, что «предполагает» вас, лол), я подумал, что все это облизано , Три часа спустя и до сих пор ничего. Затем я понял, что это должно быть связано с XML, который был разобран в переменную $ myvariable ... так что вокруг и вокруг мы шли с этим еще несколько часов.

Наконец, я понял, что настоящим виновником были мои глаза (которые не так уж и хороши) ... что выглядело как совершенно правильная строка в кавычках при чтении отладочного эха запроса перед выполнением, которое оказалось первым и последним белым пробел (который, конечно, я мгновенно удалил с помощью $myvariable=trim($myvariable, " "), and, that, of course, solved the entire problem...: < ... Да, я идиот, и мне очень жаль, но после более чем 48 часов работы над этой крайне бестолковой строкой кода (я привык писать такие вещи как:

$query="UPDATE db_one.table_one SET item1='".(string)$result_array[$i][1]."', item2='".(string)$result_array[$i][2]."' WHERE thing3=".(string)$result_array[$i][19];

... и прочую забавную чепуху), я должен был спросить (потому что я - не каламбур - не мог "увидеть" проблему ... тьфу) ... ТАК ... Я - идиот, и я извиняюсь (но воодушевлен усилиями всех вас, хороших людей, которые пытались помочь), и я извиняюсь за трату времени каждого. Мне нужно научиться обрабатывать XML намного * больше *.

Извините и еще раз спасибо!

1 голос
/ 18 ноября 2011

$myVariable сбежал?Если нет, нажмите

$escapedVariable=mysql_real_escape_string($myVariable);

, а затем запустите

$query="SELECT count(somefield) FROM db_name WHERE otherfield='$escapedVariable'";
1 голос
/ 18 ноября 2011

Это не проблема PHP, поэтому кавычки не имеют к этому никакого отношения. В запросе нет ошибок, поэтому вам нужно будет отлаживать его шаг за шагом.

I. SELECT count(*) FROM table_name

II. SELECT count(*) FROM table_name WHERE field='$myvariable'

Если вы имеете дело с переменными PHP в запросе, откройте запрос и запустите его непосредственно в базе данных, чтобы пропустить PHP-сторону ошибки.

III. SELECT count(somefield) FROM table_name WHERE field='$myvariable'

0 голосов
/ 18 ноября 2011

Вам не нужно скобки вокруг var.Плюс посмотрите на другие изменения.

$query="SELECT count(*) FROM table_name WHERE field='$myvariable'";
0 голосов
/ 18 ноября 2011

Я всегда писал так:

$query="SELECT count(somefield) FROM db_name WHERE otherfield='$myvariable' ";

Попробуйте удалить двойные кавычки и точку на имени переменной

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