无法使用 PHP 脚本删除记录


cannot delete record with php script

当我转到 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;

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

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

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

在 SQL Management Studio 中,此操作不会运行。

$strsql = "DELETE FROM produk WHERE ID =".$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中检索行。

为什么 PHP 的 mysql_ 函数被弃用?