我从另一个问题转向 nstrees ,并且一直在处理该脚本。它最后一次更新是在2005年,依赖于一些已经被明显弃用的东西,如HTTP_POST_VARS
,我不是很熟悉,因为我已经做了不到一年的PHP。
无论如何,我的菜鸟眼睛的编码风格看起来很奇怪,我想对这个函数的哪个部分做出第二个意见:
// returns the first node that matches the '$whereclause'.
// The WHERE clause can optionally contain ORDER BY or LIMIT clauses too.
function nstGetNodeWhere ($thandle, $whereclause) {
$noderes['l'] = 0;
$noderes['r'] = 0;
$res = mysql_query("SELECT * FROM ".$thandle['table']." WHERE ".$whereclause);
if (!$res) { // problem area 1
_prtError();
} else {
if ($row = mysql_fetch_array($res)) { // problem area 2
$noderes['l'] = $row[$thandle['lvalname']];
$noderes['r'] = $row[$thandle['rvalname']];
}
}
return $noderes;
}
在上面的代码中,我将我不太确定的地点标记为// problem area x
,其他所有内容都是原始脚本。
关于PA1,只是检查查询是否成功运行?
并且PA2,NetBeans向我发出警告“可能意外分配,应该避免条件中的分配。” ...所以我立即将其从=
更改为{{1}嘿,当然打破了剧本。
考虑一下,我想这只是==
上的另一个错误检查,这次是为了确保实际返回了一些数据?
最后,这是一个奇怪的PHP还是我太绿了不能理解它?
谢谢老兄(tte)s!
答案 0 :(得分:1)
问题区域1正是您的想法。它检查查询是否成功运行。查看mysql_query的文档(因为您使用Netbeans,您还可以在编辑器中突出显示函数名称,然后单击F2以获取内联弹出窗口)。您正在寻找“返回值”部分。在那里,它表示它将在任何错误上返回FALSE(布尔值为FALSE)。
检查
if (!$res)
与检查
相同if ($res == false)
理想情况下,您应该检查
if ($res === false)
因为它更安全,因为PHP对变量非常放松== false,但我现在不想把它与你混淆。如果您愿意,可以先阅读strong typing。
问题区域2很常见,但会在Netbeans中显示警告,是的。它正在做的是将mysql_fetch_array()中的值分配到$ row,并检查 现在是true还是false,同时还允许您在以下代码块中的$ row中使用相同的值if()。
答案 1 :(得分:0)
我假设这段代码可以加载文章,然后将它们排序为“左右”数组,以便可以以两列布局打印。也许。 :)
是的,PA1正在检查查询是否成功。 PA2只是获取实际的行。
答案 2 :(得分:0)
if (!$res) { // problem area 1
如果mysql_query无法执行SQL查询,则返回false。这基本上是对非(!)除false以外的任何值的测试,因此如果mysql_query中存在错误并执行代码的打印错误分支,则if测试将匹配
if ($row = mysql_fetch_array($res)) { // problem area 2
将结果集中的下一行分配给$ row;如果结果集中没有更多行,则将$ row设置为false,在这种情况下,“if test”将为false