【问题标题】:PHP MySQL fetch result and displayPHP MySQL 获取结果并显示
【发布时间】:2013-08-11 05:58:15
【问题描述】:

现在尝试在这里学习更多 PHP 和 MySQL,但我在理解其工作原理时遇到了问题。我确实知道其他语言,所以如果我能在这个例子中获得一些帮助,我希望我能更好地理解 PHP:

我有一个名为 files 的表。这包含 3 行(3 个文件),其中我定义了 fileID、thumbURL、fullRUL 和类似的东西。

在我的网页上,我想获取整个项目/文件列表,并执行一个 for 循环来显示它们。

这是我的 PHP 代码,当然会重复 3 次,但显示的信息相同,因为它只使用同一行:

    <div id="contentWrapper">
    <?php
    for($i = 0; $i < $numItems; $i++){
        echo "<div id='contentItem'>";
        echo "<a href='".$row['fullURL']."' title='".$row['description']."'><img src='". $row['thumbURL']."' width='200px' height='150px' /></a>";
        echo "</div>";
    }
    ?>
</div>

这是我从数据库中获取数据的代码:

    <?php
$db = mysql_connect("localhost", "xxxxx", "xxxxx");
mysql_select_db("login",$db) or die("Kan ikke koble til databasen");

$filesSQL = mysql_query("SELECT * FROM files");
$numItems = mysql_num_rows($filesSQL);

$sql="SELECT * FROM `files` WHERE fileID=1";
$result=mysql_query($sql);

if (false === $result) {
echo mysql_error();
}

$row=mysql_fetch_array($result, MYSQL_BOTH);
?>

这里的当前示例只获取第一行并将其存储在一个数组中,这就是为什么我在所有 3 个项目上都得到相同的值。

但是我已经尝试使用 $filesSQL[$i]['thumbURL'] 和其他类似的方法,但我无法让它工作。

我想这是一个非常基本的问题,所以我希望得到一个答案,帮助我了解如何使用数据库、数组和显示它。


我可以在 Actionscript3 或其他语言中轻松做到这一点,但在 php 中却不行! =S

谢谢! =D

【问题讨论】:

  • 不要使用 mysql_* 函数:Read more...
  • 谢谢。我应该使用什么来代替 mysql_ 函数?
  • 马特的建议:-)

标签: php mysql database arrays fetch


【解决方案1】:

代替你的for循环,尝试使用:

while($row = mysql_fetch_assoc($result)) {
       echo "<div id='contentItem'>";
       echo "<a href='".$row['fullURL']."' title='".$row['description']."'><img src='". $row['thumbURL']."' width='200px' height='150px' /></a>";
       echo "</div>";
}

在这种情况下,mysql_fetch_assoc 与没有数字键的mysql_fetch_array($result, MYSQL_BOTH) 基本相同。真正使用哪个取决于您。

不过,对于未来的数据库交互,我建议阅读 MySQLiPDO 作为 mysql 前缀,现在不推荐使用使用它的函数。

编辑:

根据一些用户的要求,一个使用更新的 MySQLi 函数的示例:

<?php
$db = new mysqli('localhost', 'user', 'pass', 'db');
if($db->connect_error) {
    die("Connection error: ".$db->connect_error);
}
$filesSQL = $db->query("SELECT * FROM files");
$numItems = $db->num_rows; //this can also be done procedurally as mysqli_num_rows($filesSQL)
$sql = $db->query("SELECT * FROM files WHERE fileID = 1");
if(!$sql) {
    echo $db->error;
}
//personally, if I wanted an SQL error after a query I would use:
$sql = $db->query('query') or die($db->error);

//then to follow, your while loop becomes
while($row = mysqli_fetch_assoc($sql)) { //can also be done with object as $row = $sql->fetch_assoc
    //do your loop
}

遗憾的是,我不知道 cmets 中 Your Common Sense 建议的 PHP 模板,因此欢迎提供示例!

【讨论】:

  • 谢谢,试试这个。但是,正如 DarkBee 所说,我想以正确的方式学习这一点,如果 mysql_ 函数已过时,我应该改用什么? =)
  • 我在我的答案 MySQLi 和 PDO 中将链接指向 mysql_ 的 2 个继任者。这些天我个人在大多数事情上都使用 MySQLi,语法非常相似。你的连接就变成了$sql = new mysqli($host, $user, $pass, $db);,查询就像$result = $sql-&gt;query($query);一样简单:)
  • 这个答案不好有两个原因:它鼓励使用过时的库(一个示例超过 1000 个链接)和丑陋的 HTML/PHP 混乱,而不是使用模板和逻辑分离。实际上将 OP 扔回 PHP 石器时代。
  • @YourCommonSense,我也用 MySQLi 示例更新了答案,但是欢迎您提供有关 PHP 模板的示例。谢谢!
【解决方案2】:

这是必须的

<?php
// connect (better to be moved into included file)
$dsn = "mysql:host=localhost;dbname=login;charset=utf8";
$opt = array(
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
);
$db = new PDO($dsn,"xxxxx", "xxxxx", $opt);

// getting files
$stmt = $db->query("SELECT * FROM files");
$files = $stmt->fetchAll();

//output
?>
<div id="contentWrapper">
<?php foreach($files as $row): ?>
    <div id='contentItem'>
        <a href="<?=$row['fullURL']?>" title="<?=$row['description']?>">
            <img src="<?=$row['thumbURL']?>" width='200px' height='150px' />
        </a>
    </div>
<?php endforeach ?>
</div>

通过PDO了解更多信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-11
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    • 2023-04-10
    • 2016-10-30
    • 2014-09-02
    • 1970-01-01
    相关资源
    最近更新 更多