我遇到了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";
}
答案 0 :(得分:2)
您没有定义$directly
,因此directly
字段将使用空字符串进行更新。请注意,如果字段未更改(即它已经是空字符串)并且没有发生错误,mysql_query()
仍将返回true
。
如果在上一页上定义了$directly
,则它不会自动保留到其他页面。您必须将其保留在$_SESSION
或其他媒体中,或将其作为$_GET
或$_POST
变量传递。
附注:mysql_*
已弃用,您的代码易受SQL注入攻击。考虑使用Prepared Statement和绑定参数升级到PDO或MySQLi。
答案 1 :(得分:1)
在编写任何查询时,首先应检查是否定义了变量:
if(isset($directly) && isset($Reference)){
$sql="UPDATE Triage SET directly='$directly' WHERE Reference='$Reference'";
$result=mysql_query($sql);
}
从php5.5.0开始,mysql_ *扩展名为deprecated,而应使用MySQLi或PDO_MySQL扩展名。