【问题标题】:cannot delete record with php script无法使用 php 脚本删除记录
【发布时间】:2015-02-24 14:28:39
【问题描述】:

当我去 produkdelete.php 时,我可以查看我要删除的记录,但是当我确认删除时,没有删除记录

这是我的脚本:

$key = @$_GET["key"];

case "I": // Get a record to display

   $tkey = $key;
   $strsql = "SELECT * FROM `produk` WHERE `id`=".$tkey;

   $rs = mysql_query($strsql, $conn) or die(mysql_error());

    if (mysql_num_rows($rs) == 0)
    {
        ob_end_clean();
        header("Location: "."produklist.php");
    }

    $row = mysql_fetch_assoc($rs);
    $x_id = $row["id"];
    $x_kdprod = $row["kdprod"];
    $x_namaprod = $row["namaprod"];
    $x_diskripsi = $row["diskripsi"];
    $x_harga = $row["harga"];

    mysql_free_result($rs);
    break;

case "D": // Delete

    // Open record
    $tkey = $key;
    $strsql = "DELETE FROM `produk` WHERE `id`=".$tkey;

    $rs = mysql_query($strsql, $conn) or die(mysql_error());

    mysql_free_result($rs);
    mysql_close($conn);

    ob_end_clean();
    header("Location: produklist.php");
    break;

key 变量是从 "produkdelete.php?key=".urlencode($row["id"]); 发送的;

每次我运行它时,输出都是这样的:

您的 SQL 语法有错误;查看与您的 MySQL 服务器版本相对应的手册,了解在第 1 行的“=”附近使用的正确语法

【问题讨论】:

  • 您是否尝试过导出正在尝试的 SQL 语句实际上是什么?
  • var_dump($tkey) 显示什么?
  • 试试produkdelete.php?key=1 OR 1=1
  • mysql_函数已弃用,请使用mysqliPDO代替mysql_函数。
  • 哇!所以。许多。危险的。东西?!错误压制?!

标签: php mysql


【解决方案1】:

在 SQL Management Studio 中这不会运行。

$strsql = "DELETE FROMprodukWHEREid=".$tkey;

丢失`,它应该执行。

使用 PDO 来增加安全性(以下说明)

    $myServer = "put url to your server here";
    $myDB = "put name of database here";
    $name = "login name db";
    $pw= "password db";

    try 
    {
        $dbConn = new PDO("mysql:host=$myServer;dbname=$myDB", $name, $pw);
    }
    catch( PDOException $Exception ) 
    {   
        //Uncomment code to show error
        //var_dump($Exception);
    }       

    function doPDOQuery($sql, queryArguments = array())
    {   
        $sth = $db->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
        $sth->execute($queryArguments );
    }

    $sql = 'SELECT * FROM produk WHERE id= :id';
    doPDOQuery( $sql, array(":id" -> $tkey) );

这应该在您的服务器上执行。它使用PDO 模块来创建prepared queries。这意味着查询本身是由数据库驱动程序本身创建的。这可以防止SQL-injection。这就是 MySQL_functions 被弃用的原因。

对于deleteupdateinsert,上面的代码就足够了。您需要执行 $sth->fetchAll() 以从 select 检索行。

Why are PHP's mysql_ functions deprecated?

【讨论】:

  • @EdyPrasetyo 您已对我的回答进行了编辑,以提供评论。请使用add comment 按钮。我认为您的本地网络服务器不再支持mysql_query。请切换到 PDO 或 mysqli
猜你喜欢
  • 2015-03-12
  • 1970-01-01
  • 2015-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多