php
  • mysql
  • 2013-05-08 56 views 0 likes 
    0

    我有一系列鏈接將信息傳遞到新頁面以運行MySQL查詢。這是從源代碼的鏈接之一:

    <a class="bloglink" href="parknews.php?tpf_news.park_id=5"> 
    

    ,這是生成的鏈接代碼:

    $park_id = $_GET['tpf_news.park_id']; 
    $sql = 'SELECT headline, story, DATE_FORMAT(date, "%d-%M-%Y") AS date, name 
    FROM tpf_news 
    INNER JOIN tpf_parks ON tpf_news.park_id = tpf_parks.park_id WHERE tpf_news.park_id = $park_id ORDER BY date DESC' ; 
    

    <a class="bloglink" href="parknews.php?tpf_news.park_id=<?php echo $row2['park_id'];?>"> 
    <?php echo $row2['name']; ?> 
    </a> 
    

    使用該信息在這裏查詢這導致此錯誤顯示:

    Error fetching news: SQLSTATE[42S22]: Column not found: 1054 Unknown column '$park_id' in 'where clause' 
    

    我不知道爲什麼它不起作用。如果在查詢中我將WHERE tpf_news.park_id = $park_id替換爲WHERE tpf_news.park_id = 6(或任何其他數字),它工作正常。

    任何想法?

    回答

    1

    當你的字符串在引號中時,你的變量不會被內插。因此,你需要用雙引號代替:

    $sql = "SELECT headline, story, DATE_FORMAT(date, '%d-%M-%Y') AS date, name 
    FROM tpf_news 
    INNER JOIN tpf_parks ON tpf_news.park_id = tpf_parks.park_id WHERE tpf_news.park_id = $park_id ORDER BY date DESC" ; 
    

    或者使用串聯:

    $sql = 'SELECT headline, story, DATE_FORMAT(date, "%d-%M-%Y") AS date, name 
    FROM tpf_news 
    INNER JOIN tpf_parks ON tpf_news.park_id = tpf_parks.park_id WHERE tpf_news.park_id =' . $park_id .' ORDER BY date DESC' ; 
    

    僅供參考,您也大開SQL injections

    1

    你有你的SQL單引號。這意味着變量不會按照您的想法顯示。使用雙引號。

    爲了上帝的愛我們準備了陳述。

    $sql = "SELECT headline, story, DATE_FORMAT(date, "%d-%M-%Y") AS date, name 
    FROM tpf_news 
    INNER JOIN tpf_parks ON tpf_news.park_id = tpf_parks.park_id WHERE tpf_news.park_id=$park_id ORDER BY date DESC" ; 
    
    $sql = 'SELECT headline, story, DATE_FORMAT(date, "%d-%M-%Y") AS date, name 
    FROM tpf_news 
    INNER JOIN tpf_parks ON tpf_news.park_id = tpf_parks.park_id WHERE tpf_news.park_id='.$park_id.' ORDER BY date DESC' ; 
    
    相關問題