我的一个朋友被要求我做一些编码。 他使用“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...?
?>
结果:只显示了一条记录。
答案 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);