-3
<?php
    $id = $_GET['id'];
    $query = "SELECT doc
    FROM docs
    WHERE id = '$id';";
    $doctext = mysql_query($query);
?>

我是 PHP/MySQL 的新手,不确定出了什么问题。上面的代码应该从 URL 中获取 id,这可以正常工作,然后从与给定值匹配的表中选择 --这是与doc该列相邻的一列数据。iddocs$id

但是,它只是返回“Resource id #11”,这让我觉得我以某种方式混淆了SELECTFROMWHERE关键字,因为它没有给出错误,只是给出了错误的数据。

为什么会发生这种情况,我该如何解决?

4

5 回答 5

6

您的查询执行良好。您的问题是您没有从结果中检索任何数据。该mysql_query函数不会自动检索数据,您可以使用mysql_fetch_rowmysql_fetch之类的函数之一以您想要的格式检索它。请注意,您真的不应该使用古老的 MySQL api,而应该使用 PDO(或 MySQL)。此外,您的代码容易受到 SQL 注入的影响,您应该使用绑定参数,这是 MySQLi 和 PDO 的一个特性。

于 2012-08-21T21:56:27.300 回答
3
$pdo = new PDO('mysql:host=localhost;dbname=testdb;charset=UTF-8', 'username', 'password');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

$stmt = $pdo->prepare('SELECT doc FROM docs WHERE id = :id');

$stmt->execute(array(':id' => $_GET['id']));

foreach ($stmt as $row) {
    var_dump($row);
}

请不要使用mysql_*函数来编写新代码。它们不再被维护并且社区已经开始了弃用过程。看到红框了吗?相反,您应该了解准备好的语句并使用PDOMySQLi。如果你不能决定哪个,这篇文章会帮助你。如果您选择 PDO,这里有很好的教程

于 2012-08-21T21:58:46.483 回答
1

根据提供的信息,我想为您指出一个更好的方向,因为您当前的方法没有正确处理结果数据。不要使用 mysql 扩展。相反,请使用MySQLiPDO_MySQL扩展。使用其中一个替代扩展将有助于作为防止 SQL 注入的第一步。

使用 PDO:

<?php  

/* Execute a prepared statement by passing an array of values */ 
$sth = $dbh->prepare('SELECT doc FROM docs WHERE id = ?'); 
$sth->execute(array($_GET['id'])); 
$results = $sth->fetchAll();  

?> 
于 2012-08-21T21:59:01.877 回答
0

像这样编辑:

<?php
     $id = $_GET['id'];
     $query = "SELECT doc
     FROM docs
     WHERE id = '".$id."';";
     $doctext = mysqli_query($query);
?>
于 2012-08-22T11:43:43.320 回答
-2

干得好:

<?php
    $id = $_GET['id'];
    $query = "SELECT doc
    FROM docs
    WHERE id = '" . mysql_real_escape_string($id) . "';";
    $result= mysql_query($query);
    $row = mysql_fetch_row($result);
    echo $row['doc'];
?>

但正如建议的那样,尝试将其移植到mysqli_*函数系列,因为mysql_*现在不推荐使用函数。

于 2012-08-21T21:59:07.650 回答