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成为可选的,因为大多数时候您不在乎类型
在您的示例查询中,可以像这样使用
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;
}
$check = prepared_query($sql, [$id, $mail])->get_result()->fetch_row();