0

我正在尝试显示由 GET 数据选择的 MySql 数据库中的条目。

if (isset($_GET["id"])){

        $id=$_GET["id"];
        $result = getSelectedBlog($id); 

        while($row = mysqli_fetch_array($result))
            { 
                extract($row); 
                ?>

                    <div class="headline"><?php echo $headline ?></div>
                    <div class="subtitle"><?php echo $subTitle ?></div>
                    <div class="content"><?php echo $content ?></div>
                    <?php
            } 

下面是 SQL 语句:

function getSelectedBlog($id){

$con = mysqli_connect('localhost', 'root', '', 'michaelWebsite') or die('could not connect');
$sql = 'SELECT * FROM tblArticle WHERE tblArticle.articleID LIKE "$id"';
$result = mysqli_query($con, $sql) or die('entry does not exist.:' . mysqli_error($con)); 
return $result; 

}

如您所见,我将获取数据作为 $id 传递给返回结果的方法。然而,没有任何东西被退回。目前有三个条目,如果我将 SQL 语句中的 $id 更改为 1、2 或 3,它将显示相应的数据,但它不适用于 $id 变量。

URL 确实以正确的信息 ?id=1 结尾。

如果这是愚蠢的,请原谅我,我已经坚持了几个小时了!!

4

5 回答 5

2

所有这些答案都将解决您的问题,但没有一个提到或阻止SQL Injection

在你的情况下,我推荐(假设articleID是一个整数字段)。

$sql = 'SELECT * FROM tblArticle WHERE tblArticle.articleID LIKE "' . (int)$id . '"';

我也很好奇你为什么使用LIKEid字段

注意:由于您使用的是 MySQLi,我鼓励您查看prepared statements

于 2012-06-04T15:08:35.020 回答
1
$sql = 'SELECT * FROM tblArticle WHERE tblArticle.articleID LIKE "'.$id.'"';

用简单的报价转义你的 var

于 2012-06-04T15:06:34.147 回答
1

试试这个:

$sql = "SELECT * FROM tblArticle WHERE tblArticle.articleID LIKE '$id'";

或与

$sql = 'SELECT * FROM tblArticle WHERE tblArticle.articleID LIKE "' . $id . '"';
于 2012-06-04T15:06:37.087 回答
0

改变

'SELECT * FROM tblArticle WHERE tblArticle.articleID LIKE "$id"'

"SELECT * FROM tblArticle WHERE tblArticle.articleID LIKE '$id'" 

只有在双引号之间的变量才会被评估"

于 2012-06-04T15:10:29.340 回答
0

您需要使用双引号以使 php 正确扩展您的变量:) 所以将您的查询更改为

$sql = "SELECT * FROM tblArticle WHERE tblArticle.articleID LIKE '$id'";
于 2012-06-04T15:07:02.017 回答