1

我正在尝试使用 PHP 中的自定义函数,以简化我手动执行的许多操作。我对自定义函数很陌生,所以我不确定这些限制。现在我正在尝试使用自定义函数使用 MySQLi 获取数据这是代码,然后我将解释这个问题:

function connect_db($db = 'db_username') {
    iconv_set_encoding("internal_encoding", "UTF-8");
    mb_language('uni');
    mb_internal_encoding('UTF-8');
    @ $mysqli = new mysqli('host',$db,'password',$db);
    if(mysqli_connect_errno())
    {
        die('connection error');
    }

}

这个似乎工作正常。这是我遇到更多麻烦的下一个功能。

编辑:感谢 Jeremy1026 的回复更新

function do_query($db = 'default_db', $query) {
    connect_db();
    $result = $mysqli->query($query);
    if(!$result){
        trigger_error("data selection error");
    }

    while($row = $result->fetch_assoc()){
        $result_array[] = $row;
    }
    return $result_array;
}

我的主机强制数据库名称和用户名相同,所以如果数据库名称是“bob”,那么访问它的用户名也将是“bob”,这就是为什么$db在连接中出现两次的原因。

我遇到的问题是这两个函数在functions.php另一个页面中并被调用。我希望能够根据列名从其他页面中的查询中提取结果。但是我还需要能够通过格式化来做到这一点,所以也许while()循环必须发生在那个页面上而不是函数中?无论页面或数据如何,我都希望它尽可能通用,以便我可以将这两个函数用于我为该站点运行的三个数据库的所有连接和所有查询。

上帝,我希望我很清楚。

非常感谢您的任何建议。我用谷歌搜索了一下,但是很难找到任何不使用过时mysql_前缀的东西,或者任何实际上以我可以使用的方式返回数据的东西。

更新:我现在在访问相关页面时遇到以下错误:

致命错误:在/functions.php中的非对象上调用成员函数 query() `

有问题的行是$result = $mysqli->query($query);. 我认为这是因为它认为$query是未定义的,但它不应该通过在页面中调用来获取定义吗?这是该页面的代码:

$query = "SELECT * FROM `table`";
$myArray = do_query($db, $query);
echo $myArray['column_name'];
4

2 回答 2

3

在您的第二个函数中,您没有返回任何数据,因此它会丢失。你需要告诉它要返回什么,见下文:

function do_query($db = 'default_db', $query) {
    connect_db();
    $result = $mysqli->query($query);
    if(!$result){
        trigger_error("data selection error");
    }

    while($row = $result->fetch_assoc()){
        $result_array[] = $row;
    }
    return $result_array;
}

然后,在使用该功能时,您将执行以下操作:

$myArray = do_query($db, 'select column from table');

$myArray然后将填充您的查询结果。

于 2012-11-26T13:17:29.110 回答
1

这是一个半答案。以下单个函数可代替这两个函数。

function query_db($database, $new_query) {
    $sqli = new mysqli('host', $database, 'password', $database);
    $sqli->set_charset("utf8");

    global $result;
    if($result = $sqli->query($new_query)){
        return $result;
    }
}

通过添加global $result,我能够访问查询的结果,从另一个页面运行

query_db("username","SELECT * FROM `column`");
while($row = $result->fetch_assoc()){
    print_r($row);
}

它比我没有功能时更精简,但仍然不知道。如果我在另一个函数中连接到数据库,它就不起作用。如果我尝试将while循环放在组合函数中,它就不起作用。我猜总比没有好。

于 2012-11-27T00:57:25.067 回答