-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」を返すだけです。これは、エラーではなく、間違ったデータを提供しているため、、、、 およびキーワードを何らかの形SELECTで混同していると思わせます。FROMWHERE

なぜこれが起こっているのですか、どうすれば修正できますか?

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_*関数を使用して新しいコードを記述しないでください。それらはもはや保守されておらず、コミュニティは非推奨プロセスを開始しています。赤いボックスが見えますか? 代わりに、準備済みステートメントについて学び、 PDOまたはMySQLiのいずれかを使用する必要があります。どちらかを判断できない場合は、この記事が役に立ちます。PDO を選択する場合は、ここに良いチュートリアルがあります。

于 2012-08-21T21:58:46.483 に答える
1

提供された情報に基づいて、現在の方法では結果のデータが適切に処理されていないため、より良い方向性を示したいと思います。mysql 拡張機能は使用しないでください。代わりに、MySQLiまたはPDO_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 に答える