当我去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行的“=”附近使用正确的语法
答案 0 :(得分:0)
在SQL Management Studio中,这不会运行。
$strsql = "DELETE FROM
{produk {1}} ID为WHERE
丢掉`,它应该执行。
使用PDO增加安全性(以下说明)
=".$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) );
。这意味着查询本身是由数据库驱动程序本身创建的。这会阻止prepared queries
。这就是为什么弃用SQL-injection
的原因。
对于MySQL_functions
,delete
和update
,上述代码就足够了。您需要执行insert
来检索$sth->fetchAll()
。