从PHP执行时,MySQL SELECT语句不起作用

时间:2010-06-17 19:00:43

标签: php mysql

我有以下代码,执行一个非常简单的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会尝试将变量计算为字符串,实际上它是一个非常大的小数。我想我可能只是在某处犯了一个愚蠢的错误,但我不知道在哪里。

3 个答案:

答案 0 :(得分:0)

你可以修改一行来说明$ netnestresults = mysql_query($ netnestquery)或die(mysql_error());

它可能会给您一个未知错误,例如连接错误,缺少数据库等等。

答案 1 :(得分:0)

做一个echo $netnestquery 在致电mysql_query之前 还要在那里添加一个骰子(mysql_error())。

答案 2 :(得分:0)

  

WHERE`id`&lt; = 50552019054038629283648959286463168512

那是一个非常大的数字。

PHP存在大数字问题。整数的最大大小取决于PHP的编译方式,以及它是否在64位系统上。

您是否检查过包含该编号的变量是否未被限制为32位或64位整数?如果它已被限制,您将需要采取措施确保它仅作为PHP中的字符串存储。 MySQL接受完全数字的字符串作为数字而不抱怨。

(话虽如此,我不确定MySQL是否可以使用大于64位的数字执行任何操作。最大的整数列为BIGINT,即64位。还有{{1} },但它被视为一个浮点数,这可能不是你想要做的......)