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; 

}

ご覧のとおり、getデータを$idとして結果を返すメソッドに渡しています。ただし、何も返されていません。現在、3つのエントリがあります。SQLステートメントの$ idを1、2、または3に変更すると、対応するデータが表示されますが、$id変数では機能しません。

URLは正しい情報?id=1で終わります。

それが愚かなことなら失礼します、私は今何時間もこれに固執しています!!

4

5 に答える 5

2

これらの答えはすべてあなたの問題を解決しますが、SQLインジェクションについて言及または防止したものはありません。

あなたの場合、私はお勧めします(articleID整数フィールドであると仮定します)。

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

また、なぜidフィールドに使用LIKEしているのか興味があります。

注: MySQLiを使用しているため、プリペアドステートメントを確認することをお勧めします。

于 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

phpで変数を正しく展開するには、二重引用符を使用する必要があります:)クエリを次のように変更します

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

変化する

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

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

変数は、二重引用符の間にある場合にのみ評価されます"

于 2012-06-04T15:10:29.340 に答える