2016-10-05 75 views
0

我正在尝试学习PHP,为此我试图创建一个URL缩短器。现在您可以输入一个链接并将其输入到数据库中。它不会随机化字符串,但我会在之后执行此操作。 (我自己改变它们以避免遇到问题)。从查询中获取数据

这里是我的表目前(我的表称为 '网址'):

Table

然后,当你去(对我来说是localhost)/ somepath它会自动重定向到/process.php?id = somepath

在process.php中,它检查指定的路径(somepath)是否存在于数据库中,然后获取其原始值。我遇到的问题是获得原始价值。再次,我是PHP的新手,并且我无法理解如何查询作品。

$query = "SELECT original FROM urls WHERE new = '$new'"; 
$result = $conn->query($query); 

如何从$ result中获取信息?或者我应该从$ query之后的$ query中获取它,因为它基本上运行它?

请解释你为什么使用什么,我不理解这一点。

谢谢,对不起,如果这是一个非常愚蠢的问题。

+0

** WARNING **:当使用'mysqli'你应该使用[参数化查询(http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)和[ 'bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php)将用户数据添加到您的查询中。 **不要**使用字符串插值或连接来完成此操作,因为您创建了严重的[SQL注入漏洞](http://bobby-tables.com/)。 **绝不**将'$ _POST'或'$ _GET'数据直接放入查询中,如果有人试图利用您的错误,这会非常有害。 – tadman

回答

0

使用fetch_assoc()抓住从表中数据的MySQLi面向对象的。

试试这个:

$query = "SELECT original FROM urls WHERE new = '$new'"; 
$result = $conn->query($query); 
if ($result->num_rows > 0) { 
// output data of each row 
while($row = $result->fetch_assoc()) { 
    echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>"; 
} 
} else { 
    echo "0 results"; 
} 

你也可以把结果以HTML表格:

if ($result->num_rows > 0) { 
    echo "<table><tr><th>ID</th><th>Name</th></tr>"; 
    // output data of each row 
    while($row = $result->fetch_assoc()) { 
     echo "<tr><td>".$row["id"]."</td><td>".$row["firstname"]." ".$row["lastname"]."</td></tr>"; 
    } 
    echo "</table>"; 
} else { 
    echo "0 results"; 
} 
0
$query = "SELECT original FROM urls WHERE new = '$new'"; 
$result = $conn->query($query);  
$rows = mysql_fetch_array($result); 
foreach($rows as $row){ 

    echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>"; 
} 

您可以使用mysql_fetch_arraymysql_fetch_assoc抓斗导致

1

在这段代码中,我使用了object oriented approachprepared statement或者如果你还在为procedural style ,你仍然可以使用它。

检查此链接:http://php.net/manual/en/mysqli.prepare.php

因此,基本上,是什么在此代码的情况是,正在准备查询,那么你绑定的参数使用(这种风格是为了避免SQL注入,因为输入是自动的一种方式转义)。结果将首先存储在变量$original中,然后我计算查询返回的行数。如果它超过1,则表示存在匹配,则如果为0,则不匹配。

如果匹配,它将回显变量$original的值。

<?php 

    $stmt = $conn -> prepare("SELECT original FROM urls WHERE new = ?"); 
    $stmt -> bind_param('s',$new); 
    $stmt -> execute(); 
    $stmt -> bind_result($original); 
    $stmt -> fetch(); 
    $stmt -> store_result(); 

    $res = $stmt -> num_rows(); 

    $stmt -> close(); 

    if($res > 0){ 
    echo $original; 
    } 
    else{ 
    //not found 
    } 

?>