У меня есть следующий фрагмент кода, выполняющий довольно простой запрос 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 попытается оценить переменную как строку, если она, по сути, очень большая десятичная. Думаю, я мог бы что-то глупо ошибаться, но я не могу сказать, где.
Можете ли вы изменить строку, чтобы сказать $netnestresults = mysql_query ($ netnestquery) или die (mysql_error());
Возможно, вам дается неизвестная ошибка, например, плохое соединение, отсутствует БД и т.д.
WHERE `id` <= 50552019054038629283648959286463168512
Это довольно большое количество.
У PHP есть проблемы с большими числами. Максимальный размер целого зависит от того, как был скомпилирован PHP, и если он находится в 64-разрядной системе.
Вы проверили, что переменная, содержащая это число, не была ограничена 32-битным или 64-битным целым числом? Если он был ограничен, вам нужно будет предпринять шаги, чтобы убедиться, что он хранится только как строка в PHP. MySQL принимает строки, которые являются полностью числовыми как числа без жалоб.
(Это говорит о том, что я не уверен, что MySQL может делать что-либо с числом, большим, чем 64-разрядным. Самый большой целочисленный столбец BIGINT
, который является 64-битным. Там также NUMERIC
, но это обрабатывается как число с плавающей запятой, и это может быть не то, что вы хотите сделать...)
выполните echo $netnestquery
перед вызовом mysql_query
также добавьте штамп (mysql_error()).