2013-08-09 5 views
0

Попытка узнать больше PHP и MySQL здесь сейчас, и у меня возникают проблемы с пониманием того, как это работает. Я знаю другие языки, поэтому я надеюсь, что я лучше пойму PHP, если я просто смогу получить помощь в этом примере:PHP MySQL fetch result and display

У меня есть таблица, называемая файлами. Это содержит 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); 
?> 

в данном примере здесь имеет только принести firsst строку и магазины, которые в массиве, так вот почему я получаю одни и те же значения на всех 3-х элементов.

Но я пробовал использовать $ filesSQL [$ i] ['thumbURL'] и другие подобные методы, но я не могу заставить его работать.

Я думаю, что это очень простой вопрос, поэтому я надеюсь на ответ, который поможет мне понять, как работать с базами данных, массивами и отображать их.


Я могу легко сделать это в ActionScript3 или на других языках, но не в php! = S

Спасибо! = D

+0

Не используйте mysql_ * функции: [Подробнее ...] (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php) – DarkBee

+0

Спасибо. Что следует использовать вместо функций mysql_? –

+0

Что Мэтт предложил :-) – DarkBee

ответ

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 префикса и функция, используя его в настоящее время не рекомендуется.

Edit:

По просьбе нескольких пользователей, пример с использованием обновленных функций 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 как предложено здравый смысл в комментарии, поэтому примеры для этого приветствуются!

+0

Спасибо, попробуем это. Однако, как сказал DarkBee, я хотел бы изучить это надлежащим образом, и если функции mysql_ устарели, что я должен использовать вместо этого? =) –

+0

Я поставил ссылки на двух последователей на mysql_ в моем ответе MySQLi и PDO. Я лично использую MySQLi для большинства вещей в наши дни, синтаксис очень похож. Ваше соединение просто становится '$ sql = new mysqli ($ host, $ user, $ pass, $ db);', запросы так же просто, как '$ result = $ sql-> query ($ query);' :) – Matt

+0

@ StianBergLarsen http://stackoverflow.com/help/someone-answers –

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