1

各種郵便情報の一覧を持っています。このデータは、「postal_codes」と呼ばれる mysql テーブル内にあります。

スクリプトで使用するために、このテーブルの各行をローカル配列に追加したいと考えています。

私が直面している問題は、while ループ内で未定義の変数に関連するエラーが発生し続けることです。

これが私がこれまでに持っているコードです:

// Get postal info and make into array
$postalCodes[] = array();
if ($stmt = $link->prepare("SELECT id, suburb, boxCode, streetCode, townName FROM postal_codes")) {

    if (!$stmt->execute())
    {
        printf("failed to execute");
    }
    if (!$stmt->bind_result($id, $suburb, $boxCode, $streetCode, $townName))
    {
        printf("failed to bind params");
    }
    if (!$stmt->store_result())
    {
        printf("failed to store result");
    }
    while ($stmt->fetch())
    {
        $postalCodes['id'] += $id;
        $postalCodes['suburb'] += $suburb;
        $postalCodes['boxCode'] += $boxCode;
        $postalCodes['streetCode'] += $streetCode;
        $postalCodes['townName'] += $townName;
    }
    $stmt->close();
}

foreach ($postalCodes as $postalCode)
{
    if ($postalCode['boxCode'] == 5850)
    {
        printf("{$postalCode['suburb']}");
    }
}

偶然誰かがこのコードの問題を発見したり、この手順をより良い方法でコーディングする方法を提案したりできますか?

この点に関するご支援と洞察をいただければ幸いです。

4

2 に答える 2

3

次のようなことができます。

if ($stmt = $link->prepare("SELECT id, suburb, boxCode, streetCode, townName FROM postal_codes"))
{
    $stmt->execute();
    $stmt->bind_result($id, $suburb, $boxCode, $streetCode, $townName);
    $stmt->store_result();
    while($stmt->fetch())
    {
        $postalCodes[] = array("id" => $id, "suburb" => $suburb, "boxCode" => $boxCode, "streetCode" => $streetCode, "townName" => $townName);
    }
}

mysqli で実際にプリペアド ステートメントを使用していることに気づきませんでした。準備済みステートメントを使用するように回答を変更しました。

于 2012-07-10T08:49:51.130 に答える
2

「エラー」はおそらく連想配列が原因です:

$postalCodes['id'] += $id;

自問してみてください:$postalCodes['id']これを初めて呼び出すときの価値は何ですか? まだ定義されていません。したがって、事前に変数を初期化するか、error_reporting()を介してこのタイプの警告をオフにすることができます。

編集:配列の問題

次のようなことをしたい:

$postalCodes=array();
while ($stmt->fetch()) {
    $postalCodes[] = array('id' => $id,
        'suburb' => $suburb,
        'boxCode' => $boxCode,
        'streetCode' => $streetCode,
        'townName' => $townName);
}
foreach($postalCodes as $postalCode) {
    // do whatever you need to do
    // with the associative array, e.g.
    echo $postcalCode['boxCode'];
}

の意味を勘違いしていたと思います+=。配列に要素を追加する場合は、 を使用しますarray[]=something

于 2012-07-10T08:48:04.193 に答える