我正在尝试为我的项目创建一个函数。我希望它处理所有检查功能。我的意思是,在您开始在数据库中插入一行之前,请检查是否存在该电子邮件地址的一行。

问题描述 投票:0回答:1

foreach

值函数:

$sql = "SELECT users_id, users_email FROM users WHERE users_id = ? AND users_email = ?;";
我的原始功能:

check_database($sql, array($id, $mail), array("s", "s"), $location);

我为这样的
function check_database($sql, $variables, $types, $location)
{
    require $_SERVER['DOCUMENT_ROOT'] . '/includes/db/db.inc.php';
    $stmt = mysqli_stmt_init($conn);
    if (!mysqli_stmt_prepare($stmt, $sql)) {
        header("Location: " . $location . "?error=sqlerror");
        exit();
    } else {
        mysqli_stmt_bind_param($stmt, $types, $variables);
        mysqli_stmt_execute($stmt);
        $result = mysqli_stmt_get_result($stmt);
        if (!$row = mysqli_fetch_assoc($result)) {
            return true;
        }
    }
}
添加了一个:

foreach
这给了我一个错误,我不知道如何解决:(

warning:mySQLI_STMT_BIND_PARAM():变量数不匹配准备好的语句中的参数数

    

update:由于PHP 8.2有一个本机mysqli函数:
Mysqli_execute_query()
可以使用以下而不是下面的函数。 您的轨道非常正确!这样的功能应该是使用Mysqli的每个PHP程序员的日常伴侣,但奇怪的是,只有很少有人想到创建一个。 我曾经有一个完全相同的想法,并实现了我自己的Mysqli助手函数

mysqli_stmt_bind_param

与您的方法有所不同

连接仅建立。您的代码每次执行查询时都连接,这绝对不是应该做什么

可以用于任何查询,不仅可以选择。您可以在示例部分中检查函数的多功能性。 types成为可选的,因为大多数时候您不在乎类型
php function mysqli foreach bindparam
1个回答
2
投票

在您的示例查询中,可以像这样使用 foreach ($types as $index => $type) { mysqli_stmt_bind_param($stmt, $type, $variables[$index]); }

或者,如果您想要一个独特的功能,则可以很好地做到

function prepared_query($mysqli, $sql, $params, $types = "") { $types = $types ?: str_repeat("s", count($params)); $stmt = $mysqli->prepare($sql); $stmt->bind_param($types, ...$params); $stmt->execute(); return $stmt; }

现在可以称为as

$check = prepared_query($sql, [$id, $mail])->get_result()->fetch_row();
    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.