Оператор MySQL SELECT не работает при выполнении из PHP

0

У меня есть следующий фрагмент кода, выполняющий довольно простой запрос MySQL:

$netnestquery = 'SELECT (`nested`+1) AS `nest` FROM `ipspace6` WHERE `id`<='.$adaddr.' AND `subnet`<='.$postmask.' AND `type`="net" AND `addr` NOT IN(SELECT `id` FROM `ipspace6` WHERE `addr`<'.$adaddr.' AND `type`="broadcast") ORDER BY `id`,`subnet` DESC LIMIT 1';

$netnestresults = mysql_query($netnestquery);
$netnestrow = mysql_fetch_array($netnestresults);
$nestlvl = $netnestrow['nest'];

echo '<br> NESTQ: '.$netnestquery;

Теперь, когда я выполняю это в PHP, я не получаю никаких результатов; пустой запрос. Однако, когда я копирую и вставляю запрос, отобранный моим кодом (для целей отладки), в командную строку mysql, я получаю действительный результат:

mysql> SELECT (`nested` + 1) AS `nest` FROM `ipspace6` WHERE `id`<=50552019054038629283648959286463168512 AND `subnet`<=36 AND `type`='net' AND `addr` NOT IN (SELECT `id` FROM `ipspace6` WHERE `addr`<50552019054038629283648959286463168512 AND `type`='broadcast') ORDER BY `id`,`subnet` DESC LIMIT 1;
+------+
| nest |
+------+
|    1 | 
+------+
1 row in set (0.00 sec)

Может кто-нибудь сказать мне, что я делаю неправильно? Я не могу помещать кавычки вокруг своих переменных, так как тогда MySQL попытается оценить переменную как строку, если она, по сути, очень большая десятичная. Думаю, я мог бы что-то глупо ошибаться, но я не могу сказать, где.

  • 0
    Одиночная / двойная кавычка? html-теги тег, который вы не видите в выводе браузера, запутывает запрос?
  • 0
    Глупая ошибка №1: не используется параметризованный запрос.
Показать ещё 5 комментариев
Теги:

3 ответа

0
Лучший ответ

Можете ли вы изменить строку, чтобы сказать $netnestresults = mysql_query ($ netnestquery) или die (mysql_error());

Возможно, вам дается неизвестная ошибка, например, плохое соединение, отсутствует БД и т.д.

  • 0
    Привет Джордан, спасибо за ваш ответ. Я пробовал это, и я не получаю никаких ошибок вообще. Однако, когда я делаю это: $ netnestrow = mysql_fetch_array ($ netnestresults) или die (mysql_error ()); Я получаю пустую страницу.
  • 0
    Вы можете выбрать что-нибудь из БД? Может быть, вы могли бы сделать «Выбрать nested as nest From ipspace6 Limit 0, 1», чтобы увидеть, что-нибудь возвращается?
Показать ещё 3 комментария
0

WHERE `id` <= 50552019054038629283648959286463168512

Это довольно большое количество.

У PHP есть проблемы с большими числами. Максимальный размер целого зависит от того, как был скомпилирован PHP, и если он находится в 64-разрядной системе.

Вы проверили, что переменная, содержащая это число, не была ограничена 32-битным или 64-битным целым числом? Если он был ограничен, вам нужно будет предпринять шаги, чтобы убедиться, что он хранится только как строка в PHP. MySQL принимает строки, которые являются полностью числовыми как числа без жалоб.

(Это говорит о том, что я не уверен, что MySQL может делать что-либо с числом, большим, чем 64-разрядным. Самый большой целочисленный столбец BIGINT, который является 64-битным. Там также NUMERIC, но это обрабатывается как число с плавающей запятой, и это может быть не то, что вы хотите сделать...)

  • 0
    Чарльз, я храню эти числа в столбце Decmial (39,0) UNSIGNED. Кажется, это работает просто отлично, но я столкнулся с проблемами с MySQL, пытаясь интерпретировать эти числа как строки. Смотрите мой другой вопрос (касающийся именно этого) здесь: stackoverflow.com/questions/2993828/…
0

выполните echo $netnestquery перед вызовом mysql_query также добавьте штамп (mysql_error()).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню