<?php $code=0; $data=[]; $msg=["注册成功","注册失败"]; include('conn.php'); include('function.php'); $userName = $_GET["userName"]; $userPwd = $_GET["userPwd"]; if($userName==""||$userPwd==""){ die(0); } $sql = "select * from users where user_name = ?"; $rs=mysqli_query($conn,$sql); $num = mysqli_num_rows($rs); if($num>0){ echo "用户名已存在"; } else{ $sql1 = "insert into users (user_name,user_pwd) values(?,?)"; $rs1=mysqli_query($conn,$sql1); if($rs){ $code = 1; } } echo getApiResult($code,$data,$msg); ?>该段代码是否有问题
时间: 2024-01-16 18:05:02 浏览: 114
PHP代码实现用户注册功能
这段代码存在一些问题,具体如下:
1. `$rs=mysqli_query($conn,$sql);` 这一行代码执行的时候并没有将 `$userName` 绑定到 SQL 语句中,应该使用预处理语句。应该将此行代码修改为 `$stmt = mysqli_prepare($conn, $sql)`,然后使用 `mysqli_stmt_bind_param` 绑定参数。
2. `$rs=mysqli_query($conn,$sql);` 返回的是执行结果,而不是查询结果。应该使用 `$rs = mysqli_stmt_execute($stmt)` 执行预处理语句,然后使用 `mysqli_stmt_store_result` 存储结果集。
3. `if($rs){ $code = 1; }` 这一行代码中的 `$rs` 应该修改为 `$rs1`,因为 `$rs` 是查询结果,而 `$rs1` 是插入操作的结果。同时,因为 `$rs1` 返回的是布尔值,应该修改为 `if($rs1){ $code = 1; }`。
以下是修改后的代码:
```php
<?php
$code = 0;
$data = [];
$msg = ["注册成功", "注册失败"];
include('conn.php');
include('function.php');
$userName = $_GET["userName"];
$userPwd = $_GET["userPwd"];
if ($userName == "" || $userPwd == "") {
die(0);
}
$sql = "SELECT * FROM users WHERE user_name = ?";
$stmt = mysqli_prepare($conn, $sql);
mysqli_stmt_bind_param($stmt, "s", $userName);
mysqli_stmt_execute($stmt);
mysqli_stmt_store_result($stmt);
$num = mysqli_stmt_num_rows($stmt);
if ($num > 0) {
echo "用户名已存在";
} else {
$sql1 = "INSERT INTO users (user_name,user_pwd) VALUES (?,?)";
$stmt1 = mysqli_prepare($conn, $sql1);
mysqli_stmt_bind_param($stmt1, "ss", $userName, $userPwd);
$rs1 = mysqli_stmt_execute($stmt1);
if ($rs1) {
$code = 1;
}
}
echo getApiResult($code, $data, $msg);
?>
```
请注意,上述代码仅仅是一个简单的示例,如果需要用于实际项目中,还需要进行更多的安全和错误处理。
阅读全文