PHP将fetch_field()更改为mysqli

问题描述 投票:-3回答:1

我的php知识是相当有限的,但是最近我需要将许多网页从较旧的php 5.2更新到php 7.3。

我已经设法更新了大多数对mysqli等的mysql引用,并使它们正常工作,但是有一页使用了日历,我真的在本节和fetch_field部分中挣扎,尤其是我发现的示例似乎没有类似的格式。

我需要更新的代码如下;

require_once('Connections/connAsh.php');
mysql_select_db($database_connAsh, $connAsh);

function selectonerow($fieldsarray, $table, $uniquefield, $uniquevalue)
{
    //The required fields can be passed as an array with the field names or as a comma separated value string
    if (is_array($fieldsarray)) {
        $fields = implode(", ", $fieldsarray);
    } else {
        $fields = $fieldsarray;
    }
    //performs the query
    $result = mysql_query("SELECT $fields FROM $table WHERE $uniquefield = '$uniquevalue'") or die("Could not perform select query - " . mysql_error());

    $num_rows = mysql_num_rows($result);

    //if query result is empty, returns NULL, otherwise, returns an array containing the selected fields and their values
    if ($num_rows == NULL) {
        return NULL;
    } else {
        $queryresult = array();
        $num_fields = mysql_num_fields($result);
        $i = 0;
        while ($i < $num_fields) {
            $currfield = mysql_fetch_field($result, $i);
            $queryresult[$currfield->name] = mysql_result($result, 0, $currfield->name);
            $i++;
        }
        return $queryresult;
    }
}

我编辑此文件的尝试是;

require_once('../Connections/connAsh.php')
$connAsh->select_db($database_connAsh);
function selectonerow($fieldsarray, $table, $uniquefield, $uniquevalue)
{
    //The required fields can be passed as an array with the field names or as a comma separated value string
    if (is_array($fieldsarray)) {
        $fields = implode(", ", $fieldsarray);
    } else {
        $fields = $fieldsarray;
    }

    //performs the query
    $result = $connAsh->query("SELECT $fields FROM $table WHERE $uniquefield = '$uniquevalue'") or die("Could not perform select query - " . mysqli_error());
    $num_rows = mysqli_num_rows($result);
    //if query result is empty, returns NULL, otherwise, returns an array containing the selected fields and their values
    if ($num_rows == NULL) {
        return NULL;
    } else {
        $queryresult = array();
        $num_fields = mysqli_num_fields($result);
        $i = 0;
        while ($i < $num_fields) {
            $currfield = mysqli_fetch_field($result);
            $queryresult[$currfield->name] = mysqli_fetch_array($result, MYSQLI_BOTH);
            $i++;
        }
        return $queryresult;
    }
}
php mysqli
1个回答
0
投票

您创建的函数几乎没有用。我建议完全摆脱它。它有可能容易被滥用,并且提供很少的抽象。这只会给您带来更多麻烦,而不是值得的。

您还使内部代码极其复杂,并且忘记了将连接变量传递给函数。如果您确实要继续使用此功能,请考虑以下事项:

// open the DB connection here:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$connAsh = new mysqli('host', 'user', 'pass', $database_connAsh);
$connAsh->set_charset('utf8mb4');

function selectonerow(mysqli $connAsh, $fieldsarray, $table, $uniquefield, $uniquevalue): array
{
    //The required fields can be passed as an array with the field names or as a comma separated value string
    if (is_array($fieldsarray)) {
        $fields = implode(", ", $fieldsarray);
    } else {
        $fields = $fieldsarray;
    }

    //performs the query
    $stmt = $connAsh->prepare("SELECT $fields FROM $table WHERE $uniquefield = ?");
    $stmt->bind_param('s', $uniquevalue);
    $stmt->execute();
    return $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
}

这是您的功能,但消除了很多噪音。我在函数的签名中添加了$connAsh,因此每次调用此函数时都必须传递它。该函数将始终返回一个数组;如果未获取任何记录,则该数组为空。这是推荐的方法。还要记住始终使用prepared statement!

© www.soinside.com 2019 - 2024. All rights reserved.