2011-08-26 88 views
1

我其实在这里有几个问题:我的最终目标是编写一个脚本,它将自动显示我保存在我的数据库中的所有图像(如果我将新图像添加到我的数据库(图像URL),每次刷新我希望这些“新”图像即时显示)。在MySQL中保存图片网址?

  1. 在MySQL中保存图片URL的正确方法是什么?目前我设置我的输入类型为VARCHAR;图像网址可以吗?

  2. 另外,目前我正在使用WAMP服务器来测试网站是如何工作的;所以我把一个图像内的www文件夹(在我的PHP脚本相同的文件夹内)和数据库表内我只是把URL如下:image.png
    这是正确的方式来输入图像的URL在我的数据库?

  3. 在一个序列中显示这些图像的最佳方式是什么?下面的代码是我到目前为止有:(图像宽度会占用页面的约70%,使图像不会彼此相邻,他们将在一列形式。)

    <?php 
        $db_host="host"; 
        $db_user="user"; 
        $db_pass="pass"; 
        $db_name="name"; 
        $db_table="table"; 
    
        mysql_connect($db_host, $db_user, $db_pass) or die(mysql_error()); 
        mysql_select_db($db_name) or die(mysql_error()); 
    
        $query = mysql_query("SELECT * FROM tablename"); 
        $result = mysql_query($query); 
        $num = mysql_num_rows($result); 
    
        for($count = 0; $count < $num; $count++) 
        { 
         //output the rows one by one(the actual images, not the URLs) 
         mysql_fetch_row($result); 
         echo("<br/>"); 
        } 
    ?> 
    

    我不知道我是否应该在那里使用mysql_fetch_row ..

  4. 我希望我的图像之间有一定的空间;我在想,最好的方法是在我的循环结尾添加一个“br”标签,这样每次显示新图像时,换行符都会被添加到页面的末尾。是最好的办法呢?

非常感谢!

+0

有上php.net极好的例子更换for环只需键入mysql – Ibu

回答

2

对于你的第一个问题,是的。对于你的第二,也是的,如果你的所有图像都存储在同一个目录中。大多数情况下,这是一个偏好问题。

您的循环应该是这样的:

for($count = 0; $count < $num; $count++) { 
     $row = mysql_fetch_assoc($result); 
     echo "<img src='". htmlspecialchars($row["image"]) ."' alt='image' />"; 
    } 

br标签很可能是一个坏主意。在您的CSS文件中将图像'display属性设置为block。网上有很多CSS手册。

0

我已经完成了基于SQL数据库中的图像存储的以前的项目。存储图像的最佳方式将作为链接,即'/stored_images/imagefilename.png'。当您需要引用图像时,只需将图像放入表格中每行的while循环中即可。

即。

获得图像

<?php 
$query = mysql_query("SELECT * FROM tablename"); 
while ($row = mysql_fetch_array($query)) { 
echo '<img src="' . $row['column of url storage in SQL'] . '" />'; 
} 

将输出数据库中的所有图像,只需更改与您在SQL数据库存储实际的列名称的URL存储在SQL列“。还与图像存储在表的名称替换“表名”中的SQL查询。

1

随着

$query = mysql_query("SELECT * FROM tablename"); 
$result = mysql_query($query); 
$num = mysql_num_rows($result); 
你做一些事情两次

。您不希望$query成为mysql_query()呼叫的结果,然后再次应用mysql_query()

在这种情况下,第二次调用会发生在资源对象而不是字符串 - 您已经得到通知。通过放置"",你可以再次将它变成一个字符串,但是对于mysql来说是没有意义的。

要验证,请尝试将or die(mysql_error())置于有问题的调用中。

而要解决这个问题,你可以尝试

$query = "SELECT * FROM tablename"; 
$result = mysql_query($query) or die(mysql_error()); 
$num = mysql_num_rows($result); 

BTW:你不需要$num当你与

while ($row = mysql_fetch_row($result)) 
    // do stuff with $row 
} 
+0

非常感谢。我不能相信我没有注意到mysql_query的重复调用。现在工作。谢谢。 :) – corecase