通过PHP从MySQL获取数据 - 我做得对吗?

时间:2011-12-22 15:13:59

标签: php mysql database

简单的问题我猜,但是一个基本问题,我不确定最佳做法。

因此,假设我有一个数据库,其中包含一些我希望向用户显示的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和其他形式的提取之间的区别..如果您可以简单地向我解释它们以及何时使用它们,我将不胜感激。

您怎么看?

2 个答案:

答案 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 - >

  • 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)

两件事:

  1. 如果您只需要关联数组,则不要使用fetch_array()。使用fetch_assoc()

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

    $ sql =“

    SELECT
        ip
    FROM
        table
    

    “;

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