PHP MySQL获取结果和显示

时间:2013-08-09 10:11:11

标签: php mysql database arrays fetch

现在尝试在这里学习更多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

2 个答案:

答案 0 :(得分: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

的更多信息

答案 1 :(得分: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模板,所以欢迎这样的例子!