我想在执行任何其他查询之前检查数据库中是否存在相同的token
。为此,我从数据库表中提取了所有行并将其存储在array
中。
if (isset($_POST['token']) && !empty($_POST['token'])){
$token_raw = $_POST['token'];
}
$sql_result = mysqli_query($connection, "SELECT * FROM used_tokens");
if ($sql_result != NULL) {
while ($sql_result_rows = mysqli_fetch_assoc($sql_result)) {
$used_tokens = [$sql_result_rows['used_tokens']];
$date_used = [$sql_result_rows['date_used']];
}
}
if ($token_raw === $used_tokens) { //I think something is wrong here...
echo 'Incorrect Token Used.';
}
else {
$submit_sql = "INSERT INTO used_tokens (used_tokens) VALUES ('$token_raw')";
if ($connection->query($submit_sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $submit_sql . "<br>" . $connection->error;
}
//$sqli = mysqli_query($connection, $conn);
}
我认为我通过检查array
而误解了if ($token_raw === $used_tokens)
部分。请为此提供最佳实践建议,也请向我提出建议。
答案 0 :(得分:-1)
到目前为止
$token_raw
-是令牌字符串
$used_tokens
-是已使用令牌的数组
如果您想知道此令牌是否曾经使用过,则必须使用in_array()
函数。
if (in_array($token_raw, $used_tokens)) ...
但是,这个想法通常不好。 您不应该选择所有令牌将它们存储在查询中。 因为,如果数据集会变大-这会导致操作缓慢并占用大量内存。
您应该通过添加条件WHERE
来编辑SQL查询。
示例:
$sql = '`SELECT * FROM `used_tokens` WHERE `used_tokens` = "%s"';
mysqli_query(
$connection,
sprintf(
$sql,
mysqli_real_escape_string(
$connection,
$token_raw
)
)
)
;