2013-07-12 120 views
0

我有一个来自我的大学的项目。我需要建立一个网站,从数据库中产生随机数据。但它也需要生成一个链接。这样人们可以复制该链接(因为网站正在生成不同的数据,所以人们可以通过复制URL来查看他们想要的数据)。PHP代码从链接数据库中获取随机数据

我想使用RAND()。但是在加入stackover之后,我发现RAND()不是一个好方法。

我可以使用RAND()获取随机数据,但它没有任何URL。这也是另一个问题。我之前发布这个问题。我想我不应该使用RAND()函数。

这是我使用的是在这一刻代码:

<!--PHP code for fetching data from database--> 
<?php 
    $con = mysql_connect("localhost","root",""); 
    if (!$con){ 
    die('Could not connect: ' . mysql_error()); 
    } 
    mysql_select_db("xlsx_db", $con); 

    $result = mysql_query("SELECT * FROM sheet1 ORDER BY RAND() LIMIT 1"); 

    if (!$result) { 
    echo 'Could not run query: ' . mysql_error(); 
    exit; 
    } 

    $row = mysql_fetch_array($result); 
    echo "<b>Quote: </b>"; 
    echo $row['quote']."<br>"; 
    echo $row['by']."<br>"; 
?> 

任何人都可以请建议我该怎么做?任何形式的帮助将非常感激。

+2

'RAND()'对于一个小型数据库来说是完美的。 “不制作任何网址”目前还不清楚,可以从代码示例中受益。 – ceejayoz

+0

你使用自定义的PHP或一些PHP框架? –

+0

@ceejayoz - 我认为问题是结果需要永久链接,所以查询需要重复。如果数据库支持RNG的种子功能,那可能是一个选项。 –

回答

0

如果你想获得一个固定链接,你将需要创建另一个页面。它将获取一个ID(或者标识您随机选择的数据记录的东西)并显示特定数据。你可以在你的随机页面链接到这个。

0

查找数据库中的随机行。 获取该行的ID。 连接带有ID的URL。 该URL应该指向一个页面,该页面将使用表中提供的id提取该行。

1

不知道这实际上是你所需要的,但是:

<?php 
$rand = true; 
if (isset($_GET['id'])) { 
    if (is_int($_GET['id'])) { 
     $id = (int) $_GET['id']; 
     $q = 'SELECT * FROM table WHERE id = ?'; 
     $stmt = mysqli_prepare($dbc, $q); 
     mysqli_stmt_bind_param($stmt, 'i', $id); 
     mysqli_stmt_execute($stmt); 
     if (mysqli_stmt_num_rows($stmt) == 1) { 
      $rand = false; 
      // display 
     } 
    } 
} 

if ($rand) { 
    $q = 'SELECT * FROM table ORDER BY RAND() LIMIT 1'; 
    // run query 
    $res = mysqli_fetch_array($r); 
    $url = 'www.example.com/index.php?id=' . $res['id']; 
} 
?> 

预处理语句不严格必要的,因为我们已经确保了$_GET['id']值为整数,但为了完整起见; D

如果您要从多个表中选择数据,则可以使用另一个表存储数据组合,然后使用组合的ID生成URL,如id para仪表。

+0

+1但是如果你用mysqli提供了连接到数据库的代码会更好,因为他的代码是使用mysql并且显示如何在代码中有一个sql注入漏洞... – Bun

+0

@奔谢谢!将添加'mysqli'功能。但是通过输入ID来防止注入攻击 –

+0

@Bun非常感谢代码。但面临一个问题。 PHP错误说“无效的索引ID”。你能告诉我如何解决它吗?我在列id中设置了mysql的索引。但仍然表现出同样的问题。 –