简单的问题我猜,但是一个基本问题,我不确定最佳做法。
因此,假设我有一个数据库,其中包含一些我希望向用户显示的IP地址。
这是一种好/安全的方式/做法吗?
//--> CONNECT TO DB, etc
$db_query = 'SELECT ip,'
."FROM table "
."GROUP BY ip ";
$result = $db_conn->query($db_query);
echo 'Found '.$result->num_rows.' records';
if($result->num_rows > 0) {
while($row = $result->fetch_array(MYSQLI_BOTH))
{
//POPULATE A HTML TABLE/WHATEVER WITH THE INFO
}
}
我最担心的是:$result->num_rows > 0
和此:fetch_array(MYSQLI_BOTH)
我问,因为我在某处读到num_rows > 0
通常意味着麻烦,具体取决于具体情况,例如用户登录。在那种情况下,我认为num_rows == 1
会对吗?
而且,我还没有完全理解MYSQLI_BOTH和其他形式的提取之间的区别..如果您可以简单地向我解释它们以及何时使用它们,我将不胜感激。
您怎么看?
答案 0 :(得分:4)
我会添加一个检查以确保您的查询执行正常 - 如果没有输出错误:
$result = $db_conn->query($db_query);
// check for error - output the error
if (!$result) {
$message = 'Invalid query: ' . mysqli_error() . "\n";
$message .= 'Whole query: ' . $db_query;
die($message);
}
echo 'Found '.$result->num_rows.' records';
除此之外......看起来还不错
编辑:
要解释MYSQLI_BOTH,选项为MYSQLI_ASSOC,MYSQLI_NUM或MYSQLI_BOTH - >
$row['column']
$row[n]
访问行的值,其中n是列的编号(基于0)$row[n]
或$row['column']
EDIT2:
还有一个用于检查返回行数的函数:
if(mysqli_num_rows($result) == 0){
echo "Sorry. No records found in the database";
}
else {
// loop you results or whatever you want to do
}
EDIT3:
答案 1 :(得分:1)
两件事:
如果您只需要关联数组,则不要使用fetch_array()
。使用fetch_assoc()
。
没有必要像这样连接查询,你可以使用类似的东西:
$ sql =“
SELECT
ip
FROM
table
“;
这有助于在WHERE子句或JOIN中使用多个选项的大型查询。输入速度更快,您可以快速复制并粘贴它以便在phpMyAdmin等中进行检查。