XAMPP环境下PHP操作MySQL遇权限拒绝错误求助
问题排查与修复方案
结合报错信息和你的代码,问题分以下几点逐一解决:
1. 数据库连接权限与mysql-fix.php冲突
报错显示调用mysql_connect时传入了密码root,但你代码里定义的$password="",这说明mysql-fix.php重写了mysql_connect函数,强制使用了错误的密码。
- 修复:直接删除
include_once('mysql-fix.php');这一行,XAMPP默认root用户密码为空,不需要该修复文件。 - 额外提示:
mysql_*系列函数已被PHP废弃,建议改用mysqli_*或PDO,避免后续兼容性问题。
2. 数据库变量拼写错误
你定义的数据库名变量是$db_nome="agency",但mysql_select_db里误用了$db_name,变量名不一致会导致数据库选择失败。
- 修复:将
mysql_select_db($db_name)改为mysql_select_db($db_nome)。
3. SQL语句多处错误
- 表名错误:你创建的表是
clients,但SQL里写的是clienti,需统一为clients。 - 字段名错误:你的表没有
Nclients字段,实际主键是code,SQL里的字段名要替换为code。 - 语法错误:拼接SQL时未加空格,会生成
UPDATE clientsSET code = ...这种非法语句,需在每个拼接段前加空格。 - 修复后的SQL代码:
$sql= "UPDATE clients "; $sql .= "SET code = $Nclients2 "; $sql .= "WHERE code = $Nclients";
4. 表单Action语法错误
表单action属性里的PHP代码缺少<和>,正确格式应为<?php echo $_SERVER['PHP_SELF']; ?>,否则表单提交地址无效。
- 修复:修改表单行:
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
5. 安全风险修复(重要)
直接将用户输入拼入SQL存在注入风险,哪怕本地环境也需规避。推荐改用mysqli预处理语句:
// 替换原有连接代码 $conn = mysqli_connect($host, $username, $password, $db_nome); if (!$conn) { die('Unable to connect to server: ' . mysqli_connect_error()); } // 替换原有SQL执行代码 if(isset($_POST["button"])) { $Nclients2 = $_POST["Nclients2"]; $Nclients = $_POST["Nclients"]; $stmt = $conn->prepare("UPDATE clients SET code = ? WHERE code = ?"); $stmt->bind_param("ii", $Nclients2, $Nclients); if ($stmt->execute()) { $righe = $stmt->affected_rows; echo "Data updated successfully, affected rows: $righe"; } else { echo "Error updating: " . $stmt->error; } $stmt->close(); $conn->close(); }
完整修复后的代码示例
<!DOCTYPE html> <html> <head> <title>Data manipulation</title> </head> <body> <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> <h1> Data to be modified </h1> <p> Old customer code </p> <input type="text" name="Nclients"> <p> New customer code </p> <input type="text" name="Nclients2"> <input type="submit" name="button" value="SUBMIT"> </form> <?php $host="localhost"; $username="root"; $password=""; $db_nome="agency"; $tab_nome="clients"; $conn = mysqli_connect($host, $username, $password, $db_nome); if (!$conn) { die('Unable to connect to server: ' . mysqli_connect_error()); } if(isset($_POST["button"])) { $Nclients2 = $_POST["Nclients2"]; $Nclients = $_POST["Nclients"]; $stmt = $conn->prepare("UPDATE clients SET code = ? WHERE code = ?"); $stmt->bind_param("ii", $Nclients2, $Nclients); if ($stmt->execute()) { $righe = $stmt->affected_rows; echo "Data updated successfully, affected rows: $righe"; } else { echo "Error updating: " . $stmt->error; } $stmt->close(); $conn->close(); } ?> </body> </html>
内容的提问来源于stack exchange,提问作者TitanFrex
相关产品推荐
相关产品推荐

