2013-10-06 64 views
0

我需要檢查數據庫中是否存在一個ID,以便我可以將其刪除,並且如果不顯示消息警告。比較「x」與「xtrue」時的問題。php數據庫檢查編號

$x = $_REQUEST['X']; 
$y = $_REQUEST['Y']; 
if($x != "") { 
    $xtrue = " SELECT x 
       FROM ".$y." 
       WHERE x=".$x; 

    if($x == $xtrue) { 
     $query="DELETE FROM ".$y." WHERE id=".$x; 

     $recordset = mysql_query($query,$conn); 

     echo "-> ".$x." from ".$y." deleted."; 
     } 
    else{echo "There is no ".$x." from ".$y.".";} 
} 
+2

這裏有很多錯誤:使用不推薦的'mysql _ *()';沒有逃避輸入變量;沒有測試輸入變量的存在;未能執行查詢;未能測試查詢錯誤的結果;有兩個查詢的競爭條件。可能還有更多。你有什麼問題? – 2013-10-06 07:40:13

+0

x怎麼可能等於xtrue?當xtrue是一個包含x加上一堆其他東西的字符串? – JAL

回答

1

你真的不應該使用mysql_*(因爲PHP5.5.0它是不建議使用),但如果你低於一定是例子如何做到這一點。

您不需要檢查記錄是否存在,只需嘗試刪除它並使用mysql_affected_rows來確定是否刪除了任何記錄。

$x = $_REQUEST['x']; 
$y = $_REQUEST['y']; 

// Basic validation 
// $x must be integer and $y may contains only letters and underscore 
if (preg_match('/^[0-9]+$/', $x) and preg_match('/^[_a-z]+$/', $y)) { 

    // If record is not exists it will not be removed 
    mysql_query("DELETE FROM $y WHERE id = $x"); 

    if (mysql_affected_rows() == 1) { 
     echo 'Record was deleted'; 
    } else { 
     echo 'Record not exists.'; 
    } 
} 
+0

完美:)謝謝! – BrunoWB

-1
$x = $_REQUEST['X']; 
$y = $_REQUEST['Y']; 
/*Validation*/ 
if($x!="" && preg_match('/^[0-9]+$/', $x) && preg_match('/^[_a-z]+$/', $y)){ 
$sql = $dbh->prepare("SELECT x FROM ? WHERE x=?"); 
$sql->execute(array($y,$x)); 
if($sql->rowCount() > 0) { 
    $query=$dbh->prepare("DELETE FROM ? WHERE id=?"); 
    $query->execute(array($y,$x)); 
    echo "-> ".$x." from ".$y." deleted."; 
}else{ 
    echo "There is no ".$x." from ".$y."."; 
} 

更多關於PDO:php.net/manual/en/book.pdo.php

+0

這裏有很多錯誤:使用不推薦的mysql _ *();沒有逃避輸入變量;沒有測試輸入變量的存在;未能測試查詢錯誤的結果;有兩個查詢的競爭條件。可能還有更多。 – 2013-10-06 07:43:24

+0

@MikeW更新回答。 – Subin