1

我遇到了 MySQL 更新查询的问题,它说成功,但实际上并没有更新数据库记录。

require_once('auth.php');

$host="localhost"; // Host name 
$username="root"; // Mysql username
$password="sysadmin"; // Mysql password 
$db_name="Elite"; // Database name 
$tbl_name="Triage"; // Table name 

mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

$Reference=$_GET['Reference'];

$sql="UPDATE Triage SET directly='$directly' WHERE Reference='$Reference'";
$result=mysql_query($sql);

if($result){
echo "Successful";
echo "<BR>";
echo "<a href='list_records.php'>View result</a>";
}
else {
echo "ERROR";
}
4

2 回答 2

2

您没有定义$directly,因此该directly字段将使用空字符串进行更新。请记住,如果字段没有更改(即它已经是一个空字符串)并且没有发生错误,它mysql_query()仍然会返回。true

如果$directly在前一页上定义,它不会自动保留到另一页。您将不得不将其保留在$_SESSION或其他介质中,或者将其作为$_GET$_POST变量传递。


旁注:mysql_*已弃用,您的代码易受 SQL 注入攻击。考虑使用 Prepared Statement 和绑定参数升级到 PDO 或 MySQLi。

于 2013-10-17T08:34:52.223 回答
1

在编写任何查询时,您应该首先检查是否定义了变量,如下所示:

if(isset($directly) && isset($Reference)){
  $sql="UPDATE Triage SET directly='$directly' WHERE Reference='$Reference'";
  $result=mysql_query($sql);
}

从 php5.5.0 开始不推荐使用mysql_* 扩展名,而是应使用MySQLiPDO_MySQL扩展名。

于 2013-10-17T08:40:50.257 回答