簡體   English   中英

從mysql DB中檢索數據不起作用/ PHP

[英]Retrieve data from mysql DB doesn't work /PHP

我有以下PHP源代碼:

$type_ID =$_GET["typeID"];
try{                               
$article_ID =$_GET["articleID"];
$select_query = mysql_query("SELECT articleContent, articleTitle From articles WHERE articleID=$article_ID && typeID=$type_ID");
}
catch(Exception $e)
{ $select_query = mysql_query("SELECT articleContent, articleTitle From articles WHERE typeID=$type_ID");
                                   }
$row = mysql_fetch_assoc($select_query); 
echo '<h1>'.$row['articleTitle'].'</h1>';
echo  $row['articleContent'];

我知道這段代碼不安全,你可以輕松地做sql注入。

這里的問題是它沒有進入catch部分(在try ),即使它應該。 解決方案可能很簡單,但我無法解決。

為什么它沒有進入catch部分?

你必須改變你的查詢以使用或者捕獲失敗,在這種情況下這樣的事情可能會起作用,雖然我不是100%(任何人都可以糾正我嗎?)你離開mysql_功能會好得多雖然並以OO風格轉移到mysqli或pdo,但您可以更好地捕獲和處理錯誤。

$type_ID =$_GET["typeID"];
try{                               
$article_ID =$_GET["articleID"];
$select_query = mysql_query("SELECT articleContent, articleTitle From articles WHERE articleID=$article_ID && typeID=$type_ID") or throw new Exception("ERROR HERE");
}
catch(Exception $e)
{ 
 $select_query = mysql_query("SELECT articleContent, articleTitle From articles WHERE typeID=$type_ID"); // note we can't throw exception here because its already in the try catch. perhaps we should look at something like the finally statement.
//echo $e->getMessage(); //uncomment this line if you want to output the exception error text set above
}
$row = mysql_fetch_assoc($select_query); 
echo '<h1>'.$row['articleTitle'].'</h1>';
echo  $row['articleContent'];

實際上只是想到你做得更好,並且事先驗證你的輸入。 (注意我在這里沒有字符串逃避不要忘記這樣做)

$type_ID =$_GET["typeID"];
$article_ID =$_GET["articleID"];

if (strlen($type_ID)>0 && strlen($article_ID)>0 && is_numeric($type_ID) && is_numeric($article_ID)) { 
$sqlquery = "SELECT articleContent, articleTitle From articles WHERE articleID=$article_ID && typeID=$type_ID";
} else {
$sqlquery = "SELECT articleContent, articleTitle From articles WHERE typeID=$type_ID";
}

try {
    $queryresult = mysql_query($sqlquery) or throw new Exception("Query Failed");
} catch(Exception $e) { 
    echo $e->getMessage(); 
}

所以基本上你是在驗證和檢查輸入並切換你的sql語句之前你的try catch邏輯純粹是為了查詢成功或失敗,這比你嘗試的更加明智。

Mysql查詢將在出錯時返回FALSE
所以你可以拋出異常
$result = mysql_query("SELECT articleContent, articleTitle From articles WHERE articleID=$article_ID && typeID=$type_ID");

if(!$result) throw new Exception("Invalid query: ". mysql_error());

並抓住他們的捕獲塊
catch(Exception $e) { echo $e->getMessage()}

它取決於你將用它做回聲或日志。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM