假设有一个“日期”列和一个“名称”列,如何在“当前日期”之前只获取“名称”?

时间:2012-12-08 15:29:24

标签: php mysql

  

可能重复:
  PHP SQL, query returns only one row of data

我的一个朋友被要求我做一些编码。 他使用“gameName”(VARCHAR)和“releaseDate”(日期)列创建了一个MySQL数据库。他需要从当前日期之前发布的“gameName”中获取并显示游戏名称。

这里我使用了MySQL的 CURDATE()函数来过滤掉已经发布的游戏。但问题是我必须为每个结果写一个回声线。这是糟糕的编程,背后的逻辑非常糟糕。

<?php
$mysql_host="host_name";
$mysql_username="db_user";
$mysql_password="db_password";
$mysql_database="db_name";
$mysql_table="table_name";

mysql_connect("host_name", "db_user", "db_password") or die("YOLO");
mysql_select_db("db_name") or die("YOLO");

$sql = mysql_query("SELECT gameName FROM table_name WHERE CURDATE() > releaseDate");
$result = mysql_fetch_row($sql);

echo $result[0];
echo $result[1];
echo $result[2];
// and so on...?
?>

结果:只显示了一条记录。

2 个答案:

答案 0 :(得分:5)

首先,mysql_*函数已弃用,不应再使用。我强烈推荐PDO库,特别是如果您要处理用户输入。

如果您坚持使用mysql_*,您的代码应该更像这样:

$result = mysql_query("your query") or die(mysql_error());
while ($row = mysql_fetch_row($result)) {
    echo $row['gameName'] . '<br />';
}

我同意上述评论。在你太介入之前,我建议你真正阅读这些手册。拥有一点额外的知识可以对您作为程序员的效率产生重大影响(更不用说代码的安全性)。

答案 1 :(得分:2)

PDO示例,

   $config = array(
        'host'  => 'hostname',
        'db'    => 'db_name',
        'user'  => 'db_user',
        'pass'  => 'db_pass'
    );

    try{

        $PDO = new PDO(
            'mysql:host='.$config['host'].';dbname='.$config['db'],
            $config['user'],
            $config['pass']
        );

        $query = $PDO->query("
                    SELECT id FROM table_name WHERE CURDATE() > releaseDate"
            );
        $query->setFetchMode(PDO::FETCH_OBJ);
        while($game = $query->fetch()){
            echo $game->gameName;
        }   

    }catch(PDOException $e){
        echo $e->getMessage();
    }
    unset($PDO);