-3

I have a script which works without errors, but can't delete chosen value from mysql. It looks like: What problem could be?

include('opendb.php');
$a = $_GET['new_pav'];
$select = mysql_query("SELECT * from naujiena WHERE new_pav = '$a'");
while($row = mysql_fetch_row($select)){
    $result = mysql_query("DELETE FROM `naujiena` WHERE new_pav='".mysql_real_escape_string($a)."' ");
}
4

2 回答 2

1

首先,阅读此(及以下):

请不要mysql_*在新代码中使用函数。它们不再被维护并被正式弃用。看到红框了吗?改为了解准备好的语句,并使用PDOMySQLi -本文将帮助您决定使用哪个。如果您选择 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 中的任何不是您自己硬编码的东西,期间。

于 2013-03-09T00:17:27.313 回答
0

除了使用mysql_您的代码库:

$select = mysql_query("SELECT * from naujiena WHERE new_pav = '$a'");
while($row = mysql_fetch_row($select)){
    $result = mysql_query("DELETE FROM `naujiena` WHERE new_pav='".mysql_real_escape_string($a)."' ");
}

SELECT你没有逃避价值$a但在删除你逃避它。

无论如何,如果您只是进行删除,则不需要SELECTorwhile循环。因此,您可以使用以下代码:

$result = mysql_query("DELETE FROM `naujiena` WHERE new_pav='".mysql_real_escape_string($a)."' ");
于 2013-03-09T08:29:10.790 回答