现在尝试在这里学习更多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
答案 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)
基本相同。这取决于你真正使用它。
对于未来的数据库交互,我建议您将MySQLi或PDO作为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模板,所以欢迎这样的例子!