0

ユーザーが選択した SQL サーバーの種類に応じて、SQL クエリを実行できる機能があります。この関数は、1 行のデータを取得する場合には正常に機能しますが、複数の行を返すことはありません。

これはSQL関数です:

function sqlQuery($query){
switch (DATABASE_TYPE) {
    case 'MYSQL':
        // Establishes a connection to the database.
        $connection = mysql_connect(DATABASE_LOCATION, DATABASE_USERNAME, DATABASE_PASSWORD);
        if(!$connection){
            throw new Exception(mysql_error(), 1);
        }
        mysql_select_db(DATABASE_NAME);

        // Performs the query.
        global $response;
        $response = mysql_query($query);
        if(!$response){
            throw new Exception(mysql_error(), 1);
        }
        return mysql_fetch_array($response);
        break;
    }
}

上で述べたように、これは単一行のクエリでは問題なく機能しますが、それ以上は取得できません。

私がこれを試してみると:

$sql = "SELECT * FROM test"
$rows = sqlQuery($sql);
foreach($rows as $value){
    echo($value);
}

テストの行11 | Hello | PHPがエコーする場合11HelloHelloPHPPHP

4

4 に答える 4

0

raheel の答えにもう少し光を当てるために、mysql_fetch_array は単一行の結果のみを返します。while ループを使用すると、追加の行が存在する限り引き続き取得できます。追加情報については、関数内から動的配列を取得するを参照してください。

于 2012-12-17T05:45:39.070 に答える
0

それ以上の行がある場合は、forloop を使用してすべての行を取得する必要があります。つまり、resourceid として返されます。他に必要なもの.. IDをキーとして配列に保存します...次の編集されたコードを確認してください。

function sqlQuery($query){
switch (DATABASE_TYPE) {
    case 'MYSQL':
        // Establishes a connection to the database.
        $connection = mysql_connect(DATABASE_LOCATION, DATABASE_USERNAME, DATABASE_PASSWORD);
        if(!$connection){
            throw new Exception(mysql_error(), 1);
        }
        mysql_select_db(DATABASE_NAME);

        // Performs the query.
        global $response;
        $response = mysql_query($query);
        if(!$response){
            throw new Exception(mysql_error(), 1);
        }
        while($rows = mysql_fetch_array($sql))
        {
            $data[$rows['id]] =  $rows;
        }
        return $data;
        break;
    }
}
于 2012-12-17T06:00:20.427 に答える
0

それをするのは簡単です

$sql = "SELECT * FROM test";
$data = array();

while($rows = mysql_fetch_assoc($sql))
{
    $data[] = $rows ;
}

return $data;
于 2012-12-17T05:41:54.760 に答える
0

返されるデータの種類を変更することで、問題を修正できました。

return mysql_fetch_array($response);

に:

$rows = array();
while($row = mysql_fetch_array($response)){
    array_push($rows, $row);
}
return $rows;

ご助力いただきありがとうございます!

于 2012-12-17T23:35:31.950 に答える