[英]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.