2013-08-20 137 views
-4

我無法理解爲什麼我無法在這裏正確使用echo語句。其中通過獲得價值腳本

http://example.com/example.php?page=2&hot=1002 

鏈接下面是我的腳本,這需要從鏈接中獲取值。

<?php 
    session_start(); 
    require('all_functions.php'); 
    if (!check_valid_user()) 
    { 
     html_header("example", ""); 
    } 
    else 
    { 
     html_header("example", "Welcome " . $_SESSION['valid_user']); 
    } 
    require('cat_body.php'); 
    footer(); 
?> 

cat_body.php如下:

<?php 
    require_once("config.php"); 

    $hot = $_GET['hot']; 

    $result = mysql_query("select * from cat, cat_images where cat_ID=$hot"); 

    echo $result['cat_name']; 
?> 

請幫助我。

+0

歡迎來到Stack Overflow!在你編寫任何**更多的SQL接口代碼之前,請務必閱讀[正確的SQL轉義](http://bobby-tables.com/php),以避免嚴重的[SQL注入漏洞](http:/ /bobby-tables.com)。另外,不應該在新的應用程序中使用['mysql_ *'functions](http://php.net/manual/en/ref.mysql.php),並且將從未來版本的PHP中刪除。請考慮切換到[**'MySQLi' **或**'PDO' **](http://php.net/manual/en/mysqlinfo.api.choosing.php)。正如所寫,有人可能會在幾秒鐘內毀掉整個網站。 –

+0

**您可以[SQL注入](http://stackoverflow.com/q/60174)** –

+3

請閱讀手冊如何使用'mysql_query'。 – deceze

回答

0

mysql_query返回成功資源(或錯誤發生時),而不是數據。要獲取數據,您需要使用像mysql_fetch_assoc()這樣的提取函數,該函數返回具有列名作爲數組鍵的數組。

$result = mysql_query("select 
* from cat, cat_images 
where 
cat_ID=$hot"); 
if ($result) { 
    $row = mysql_fetch_assoc($result); 
    echo $row['cat_name']; 
} else { 
    // error in query 
    echo mysql_error(); 
} 

//此外
您的查詢定義不清。首先,where條款中的兩個表之間沒有定義關係。其次(這就是爲什麼你得到那條消息「Column'cat_ID'where子句不明確」),這兩個表都有列cat_ID,但是你沒有明確告訴mysql你正在使用哪個表的列。

查詢應該是這個樣子(可能不是你所需要的東西,所以適當地更改):

"SELECT * FROM cat, cat_images 
WHERE cat.cat_ID = cat_images.cat_ID AND cat.cat_ID = " . $hot; 

cat.cat_ID = cat_images.cat_ID部分在告訴這兩個表是通過組合行,其中那些加盟列是相同的。

另外,直接插入GET/POST數據查詢時要小心。閱讀更多關於(My)Sql injection

Mysql函數已被棄用,並將很快從PHP中完全刪除,您應該考慮切換到MySQLiPDO

+0

得到消息where子句中的列'cat_ID'含糊 – user2692733

+0

感謝Ivan的幫助,我使用了你的代碼。非常感謝 – user2692733