0

私は別の質問からnstreesに切り替えられ、スクリプトを実行してきました。HTTP_POST_VARSこれは2005年に最後に更新され、PHPを1年弱しか使用していないため、すぐにはなじみのないもののように、明らかに非推奨になっているものに依存していました。

とにかく、コーディングスタイルは私の新人の目には奇妙に思えます。この関数のどの部分が機能するかについてセカンドオピニオンをお願いします。

// 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は、「偶発的な割り当ての可能性があるため、条件での割り当ては避ける必要があります」という警告を表示します。...だから私はすぐにそれをからに変更し===もちろんスクリプトを壊しました。

それについて考えると、これは単なる別のエラーチェックだと思います$res。今回は、一部のデータが実際に返されたことを確認しますか?

最後に、これは奇妙なPHPですか、それとも私はそれを理解するにはあまりにも環境に優しいのでしょうか?

ありがとうおい!

4

3 に答える 3

1

問題領域1は、まさにあなたが思っていることです。クエリが正常に実行されたかどうかを確認します。mysql_queryのドキュメントを参照してください(Netbeansを使用しているため、エディタで関数名を強調表示し、F2キーを押してインラインポップアップを表示することもできます)。「戻り値」セクションを探しています。そこには、エラーが発生するとFALSE(ブール値FALSE)が返されると書かれています。

チェック中

if (!$res)

チェックするのと同じです

if ($res == false)

理想的には、次のことを確認する必要があります

if ($res === false)

PHPは変数==falseについて非常にリラックスしているので安全ですが、今はそれと混同したくありません。必要に応じて、強い型付けについて読むことから始めることができます。

問題領域2はかなり一般的ですが、Netbeansで警告が表示されます。mysql_fetch_array()から$ rowに値を割り当て、それがtrueかfalseかを確認すると同時に、if()内の次のコードブロックの$rowでも同じ値を使用できるようにします。

于 2010-08-12T09:21:17.013 に答える
0

このコードは記事を読み込んでから「左右」の配列に並べ替えて、2列のレイアウトで印刷できると思います。多分。:)

はい、PA1はクエリが成功したかどうかをチェックしています。PA2は、実際の行をフェッチしているだけです。

于 2010-08-12T09:10:56.693 に答える
0
if (!$res) { // problem area 1 

mysql_queryは、SQLクエリの実行に失敗した場合、falseを返します。これは基本的にfalse以外の値ではない(!)テストであるため、mysql_queryにエラーがあった場合にifテストが一致し、コードのprinterrorブランチを実行します。

if ($row = mysql_fetch_array($res)) { // problem area 2  

結果セットの次の行を$rowに割り当てます。または、結果セットに行がなくなった場合は$ rowをfalseに設定します。この場合、「iftest」はfalseになります。

于 2010-08-12T09:13:27.407 に答える