当我转到 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
被弃用的原因。
对于delete
,update
和insert
上面的代码就足够了。您需要执行$sth->fetchAll()
才能从select
中检索行。
为什么 PHP 的 mysql_ 函数被弃用?