首先,阅读此(及以下):
请不要mysql_*
在新代码中使用函数。它们不再被维护并被正式弃用。看到红框了吗?改为了解准备好的语句,并使用PDO或MySQLi -本文将帮助您决定使用哪个。如果您选择 PDO,这里有一个很好的教程。
红色警告框告诉您停止使用mysql_*
任何新产品。
至于你的查询,DELETE FROM x WHERE y=z
是一个有效的查询,所以错误可能来自你使用引号(如果new_pav
是一个 int,那么这可以解释它);字符串在 MySQL 中被引用。
此外,不要在 SQL 查询中插入/连接字符串,否则您将面临 SQL 注入的风险。查找pdo,并开始使用涉及状态(数据库连接)而不是变量和无数函数的类。(我最初在这里使用 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 --
并删除您的整个表。
正如您所看到的,这远非单线/两线,但您绝不能相信添加到 SQL 中的任何不是您自己硬编码的东西,期间。