陷入(php)foreach mysqli
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了陷入(php)foreach mysqli相关的知识,希望对你有一定的参考价值。
我正在尝试编写一个php页面来检查$_GET['uuid']
是否与数据库中的值匹配,以及当前访问者的ip地址是否与数据库中存储的$_GET['uuid']
的ip地址匹配。
这是代码:
if(isset($_GET['uuid'])){
$uuid = $_GET['uuid'];
include('database.php');
$sql = "SELECT * FROM `ips`";
$sql2 = "SELECT * FROM `ips` WHERE `uuid` = '". $uuid ."'";
foreach($mysqli->query($sql) as $row){
$ipss = $row;
}
foreach($mysqli->query($sql2) as $ipsrrr){
$ipsr = $ipsrrr;
}
if($ipss['uuid'] == $uuid && $ipsr['ip'] == $gip){
$allowed = 1;
}else{
header('Location: index.php');
exit(0);
}
}else{
header('Location: index.php');
exit(0);
}
我不知道为什么,但我陷入了foreach循环。我得到一个带有加载图标的空白页面。
答案
$mysqli->query($sql)
返回结果集。
尝试替换每个foreach循环(为每个循环修改)
$resultSet = $mysqli->query($sql);
while($row = $resultSet->fetch_row())
{
$ipss = $row;
}
这将检索结果集,然后对返回的每一行执行操作。
另一答案
您不需要执行任何循环。正如@deceze所说,你可以简单地查询uuid和ip,如果有结果,则用户被“允许”。注意SQL注入。
if(!empty($_GET['uuid'])){
// Evaluate IP and UUID.
require_once 'database.php';
if($mysqli->query("SELECT * FROM ips WHERE uuid = $uuid AND ip = $ip")){
$allowed = 1;
} else {
header('Location: index.php');
}
} else {
header('Location: index.php');
}
没有测试过,但它应该工作。
关于代码的一些事情:
- 相反,如果包括它,您应该需要您的数据库文件。
- 你可以看一下PDO和Prepared Statements。
另一答案
你的代码$mysqli->query($sql)
返回一个对象,而不是一个可迭代的数组。要获取字段数组,您需要使用方法fetch_all(MYSQLI_ASSOC)
。看下面的例子:
<?php
$host = "localhost";
$mysql = mysqli_connect($host, "root", "", "database");
$result = $mysql->query("SELECT * FROM table");
$result = $result->fetch_all(MYSQLI_ASSOC);
//parameter `MYSQLI_ASSOC` means to return associated array,
//(without it you will get a numeric keys for array)
//$result[0] contains your array.
//Now you can manipulate data:
foreach ($result[0] as $field) {
$get_data = $field['some_col_name'];
}
?>
以上是关于陷入(php)foreach mysqli的主要内容,如果未能解决你的问题,请参考以下文章