2011-12-22 31 views
1

简单的问题我猜,但一个基本的问题,我不知道最佳实践。通过PHP从MySQL获取数据 - 我做对了吗?

假设我有一个数据库,其中包含一些我想要显示给用户的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

对我来说看起来完全合理。 – 2011-12-22 15:16:21

+0

看起来不错,但在上面的问题中缺少一些代码。猜猜你想添加一个粗体文本或类似的东西。无论如何,它看起来不错。取决于你真正想要的,如果你将用相同的IP地址进行分组,你只会得到一个结果,所以也许你不需要WHILE,但它也可以用一个结果工作,所以没关系。 – StudioArena 2011-12-22 15:20:39

+0

你好Eric和StudioArena,我已经编辑了上面的问题,增加了两个具体问题。如果你可以再看一次... StudioArena,让我们假设这个特定的查询,我会得到不止一行。 – Ion 2011-12-22 15:21:50

回答

4

我想补充一个检查,以确保您的查询是OK执行 - 如果没有输出错误:

$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'; 

除此之外...看起来OK

编辑:

要解释MYSQLI_BOTH,选项有MYSQLI_ASSOC,MYSQLI_NUM,或MYSQLI_BOTH - >

  • MYSQLI_ASSOC =关联数组这样的行的值可以利用$row['column']
  • MYSQLI_NUM =数字阵列,使得该行的值是使用数$row[n]其中n是(基于0)的列的数目访问进行访问
  • MYSQLI_BOTH =可以同时使用以行的访问值要么$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:

php.net has some excellent docs for the MY_SQLI extension

1

两件事情:

  1. 如果你只需要一个关联数组,那么不要使用fetch_array()。使用fetch_assoc()

  2. 有没有必要来连接这样的查询,你可以使用类似:

    $ SQL = “

    SELECT 
        ip 
    FROM 
        table 
    

    ”;

这有助于在WHERE子句或JOIN中具有多个选项的大型查询。输入更快,您可以快速复制并粘贴它以检查phpMyAdmin等。