从函数内部获取动态数组

时间:2012-12-17 05:39:06

标签: php mysql sql

我有一个允许我根据用户选择的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);
}

如果测试的第1行为1 | Hello | PHP,则会回显11HelloHelloPHPPHP

4 个答案:

答案 0 :(得分:0)

这很简单

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

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

return $data;

答案 1 :(得分:0)

为了更清楚地了解raheel的答案,mysql_fetch_array只返回一行结果。使用while循环允许您继续抓取其他行,只要它们存在。有关其他信息,您可能需要查看Getting dynamic array from inside a function

答案 2 :(得分:0)

如果你有更多行,你必须使用forloop来获取所有行...它将作为resourceid#返回 - 请print_r或echo你的结果并检查它...之后使用mysql_fetch_row中的结果~mysql_fetch_array~你想要的其他东西..并将其存储在数组中,其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;
    }
}

答案 3 :(得分:0)

我能够通过更改返回的数据类型来解决问题:

return mysql_fetch_array($response);

为:

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

感谢您的帮助!