まず、これ(および以下)を読んでください:
mysql_*
新しいコードで関数を使用しないでください。それらはもはや保守されておらず、公式に廃止されています。赤いボックスがか? 代わりにプリペアド ステートメントについて学び、 PDOまたはMySQLiを使用してください。この記事は、どちらを使用するかを決めるのに役立ちます。PDO を選択する場合は、ここに良いチュートリアルがあります。
赤い警告ボックスはmysql_*
、新しいものへの使用を中止するように伝えています。
クエリに関してDELETE FROM x WHERE y=z
は、有効なクエリであるため、エラーは引用符の使用に起因する可能性があります(new_pav
がintの場合、これで説明できます); 文字列は MySQL で引用されます。
また、SQL クエリで文字列を補間/連結しないでください。SQL インジェクションの危険があります。pdo を検索し、変数や無数の関数ではなく、状態 (db 接続) に関連するクラスの使用を開始します。(私はもともとここでmysqliを使用していました):
try {
$db = new PDO("mysql:dbname=$dbname;host=$dbhost", $dbuser, $dbpass);
$query = $db->prepare("SELECT COUNT(*) FROM naujiena WHERE new_pav = :pav");
if (!$query->bindParam(":pav", $_POST["new_pav"])) {
die("Input incorrect; couldn't bind");
}
$query->execute();
$rows = $query->fetchColumn(0); // fetch a single column. count(*) here.
if ($rows !== 0) { // It has a result~
$query = $db->prepare("DELETE FROM naujiena WHERE new_pav = :pav");
$query->execute(array(":pav" => $_POST["new_pav"]));
}
$db = null; // explicitly close connection
} catch (PDOException $e) { // catch any exception PDO throws at you.
// note that you should catch where appropriate.
die("Connection Failed: " . $e->getMessage());
}
SQL インジェクションを' OR 1=1 --
使用すると、テーブル全体を入力して削除できることに注意してください。
ご覧のとおり、これは 1/2 ライナーではありませんが、自分でハードコーディングしていない SQL に追加されたものを決して信頼してはなりません。