0

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

我有一个名为文件的表。这包含 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

4

2 回答 2

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

于 2013-08-09T10:33:29.823 回答
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
}

遗憾的是,我不知道评论中您的常识所建议的 PHP 模板,因此欢迎提供示例!

于 2013-08-09T10:16:52.917 回答