0

データベース テーブル「system」には 2 つの列があります。を持っていて、systemId取得したいですmobileSystemId。しかし、$mobileSystemId既にグローバルとして定義した変数 s は常に空です。

編集: 現在、array_map は機能しません。私は常に例外出力「Arrayfehler ArrayMap」を取得します。次のコードがあります。

$mobileSystemIds=array();

function getMobileSystemId($systemId)
    {
        global $mysqli;
        global $mobileSystemIds;
        $query="SELECT mobileSystemId FROM system WHERE systemId ='" .$systemId ."'";
        if(!$result=$mysqli->query($query))
        {
            echo "Datenbankfehler DB-QUery";
            exit(0);
        }
        if (!$mobileSystemId=$result->fetch_assoc())
        {
            echo "Datenbankfehler DB-Fetch";
            exit(0);
        }
        $mobileSystemId=$mobileSystemId["mobileSystemId"];
        echo "mobile System ID: " .$mobileSystemId ."<br />";
        return $mobileSystemId; 
    }   

    if(!$mobileSystemIds=array_map("getMobileSystemId",$systemList))
    {
        echo "Arrayfehler ArrayMap";
    }
4

2 に答える 2

0

この場合、return関数でaを使用するとはるかにクリーンになります。あなたの問題とは何の関係もありませんが、あなたの$systemId変数は信頼されていますか?(SQLインジェクションを防ぐため)。

于 2013-02-04T08:09:36.023 に答える
0

アップデート:

if(!$mobileSystemIds=array_map("getMobileSystemId",$systemList))
{
    echo "Arrayfehler ArrayMap";
}

読む必要があります(チェックしただけです。私にとってはうまくいきます):

$mobileSystemIds = array_map('getMobileSystemId', $systemsList);
if (empty($mobileSystemIds))
{
    if (empty($systemsList) || !(is_array($systemsList)))
        echo "OK: no mobile IDs, but no systems either";
    else
        echo "THIS now is strange :-(";
}
else
{
    echo "Alles OK";
    var_dump($mobileSystemIds);
}

入力に基づいてダミー値を返すことでこれを試しました。うまくいかない場合は、データベースに何か奇妙なものがあるに違いありません。

(更新: 以下のテキストは、配列マッピングを使用していない元のコードを参照しています)

あなたのコードはそのまま動作するはずです。複数$mobileSystemIdの を 1 つにまとめ$mobileSystemIdます。

それは動作します: DB 呼び出しを削除し、コードとスペルはそのままにして、より単純なコードでテストしました。

したがって、エラーは別の場所にあるはずです。このコードは別のものに含まれていると思います。

  • $mobileSystemIds = array();宣言が複数回実行されるため、すべてのデータが失われます。
  • $mobileSystemIds = array();宣言自体がよりローカルなスコープに含まれており、外部から読み取り、空の値またはまったく異なる値を読み取ります。

コードの最初の部分を次のように置き換えてみてください。

GLOBAL $mobileSystemsIds;
if (defined($mobileSystemsIds))
    trigger_error("mobileSystemsId defined more than once", E_USER_ERROR);
else
    $mobileSystemsIds = array();

また、関数本体で:

if (!defined($mobileSystemsId))
    trigger_error("mobileSystemsId should have been defined", E_USER_ERROR);
于 2013-02-04T08:14:53.003 に答える