MySQL查询没有正确执行PHP

时间:2012-08-21 21:53:04

标签: php mysql

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

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

然而,它只返回“资源ID#11”,这让我觉得我混淆了$idSELECTFROM关键字,因为它是没有给出错误,只是错误的数据。

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

5 个答案:

答案 0 :(得分:6)

您的查询执行正常。您的问题是您没有从结果中检索任何数据。 mysql_query函数不会自动检索数据,您可以使用mysql_fetch函数之一以mysql_fetch_row函数的形式检索数据。

请注意真的不应该使用古老的MySQL api,而应该使用PDO(或MySQL)。此外,您的代码易受SQL注入攻击,您应该使用绑定参数,这是MySQLi和PDO的一项功能。

答案 1 :(得分: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_*函数来编写新代码。它们已不再维护,社区已经开始deprecation process。请参阅red box?相反,您应该了解prepared statements并使用PDOMySQLi。如果您无法确定哪个,this article会对您有所帮助。如果您选择PDO,here is good tutorial

答案 2 :(得分: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();  

?> 

答案 3 :(得分:0)

像这样编辑:

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

答案 4 :(得分:-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_*函数现已弃用。