INSERT INTO SQL php 函数不起作用
INSERT INTO SQL php Function does not work
我已经设法编写了一个 php 脚本来检查用户名是否已存在于数据库中,如果不存在则只添加一个新用户。
这是我的 php 脚本:
<?php
require "init.php";
if(isset($_POST['username']) && isset($_POST['forename']) && isset($_POST['surname']) && isset($_POST['password'])){
$username = $_POST['username'];
$forename = $_POST['forename'];
$username = $_POST['surname'];
$password = $_POST['password'];
$stmt = "SELECT username FROM users WHERE username = ?";
$result = $dbcon -> prepare($stmt);
$result->bind_param('s', $username);
$result->execute();
$result->bind_result($username);
if($result->fetch()){
echo "Can't add new user as it already exists!";
}
else{
$stmt_two = "INSERT INTO users (username, forename, surname, password)
VALUES(?, ?, ?, ?)";
$result_two = $dbcon -> prepare($stmt_two);
$result_two->bind_param('ssss', $username, $forename, $surname, $password);
$result_two->execute();
$result_two->close();
echo json_encode("Success");
}
}
?>
我认为由于我有多个准备好的语句,记录没有被插入或被间歇性地插入。如果我只是用 SELECT FROM
语句单独执行 INSERT INTO
语句 - 记录几乎会立即添加。
为什么会这样,我的代码有什么问题?
谢谢
正如我在评论中所说,不要过于复杂,只需检查找到的行数即可。不需要取任何东西。您只是在检查该用户是否存在。
$stmt = "SELECT username FROM users WHERE username = ?";
$result = $dbcon->prepare($stmt);
$result->bind_param('s', $username);
$result->execute();
$result->store_result();
if($result->num_rows() > 0) { // if it exists
} else {
// make your insertions
}
还有一个注意事项:
isset
可以接受多个参数:
if(isset($_POST['username'], $_POST['forename'], $_POST['surname'], $_POST['password'])) {
// and so on
}
编辑:另一种风格(使用 MySQL 的 COUNT()
):
$stmt = "SELECT COUNT(username) FROM users WHERE username = ?";
$result = $dbcon->prepare($stmt);
$result->bind_param('s', $username);
$result->execute();
$result->bind_result($count);
$result->fetch();
if($count > 0) { // exists
} else {
// do something else
}
我已经设法编写了一个 php 脚本来检查用户名是否已存在于数据库中,如果不存在则只添加一个新用户。
这是我的 php 脚本:
<?php
require "init.php";
if(isset($_POST['username']) && isset($_POST['forename']) && isset($_POST['surname']) && isset($_POST['password'])){
$username = $_POST['username'];
$forename = $_POST['forename'];
$username = $_POST['surname'];
$password = $_POST['password'];
$stmt = "SELECT username FROM users WHERE username = ?";
$result = $dbcon -> prepare($stmt);
$result->bind_param('s', $username);
$result->execute();
$result->bind_result($username);
if($result->fetch()){
echo "Can't add new user as it already exists!";
}
else{
$stmt_two = "INSERT INTO users (username, forename, surname, password)
VALUES(?, ?, ?, ?)";
$result_two = $dbcon -> prepare($stmt_two);
$result_two->bind_param('ssss', $username, $forename, $surname, $password);
$result_two->execute();
$result_two->close();
echo json_encode("Success");
}
}
?>
我认为由于我有多个准备好的语句,记录没有被插入或被间歇性地插入。如果我只是用 SELECT FROM
语句单独执行 INSERT INTO
语句 - 记录几乎会立即添加。
为什么会这样,我的代码有什么问题?
谢谢
正如我在评论中所说,不要过于复杂,只需检查找到的行数即可。不需要取任何东西。您只是在检查该用户是否存在。
$stmt = "SELECT username FROM users WHERE username = ?";
$result = $dbcon->prepare($stmt);
$result->bind_param('s', $username);
$result->execute();
$result->store_result();
if($result->num_rows() > 0) { // if it exists
} else {
// make your insertions
}
还有一个注意事项:
isset
可以接受多个参数:
if(isset($_POST['username'], $_POST['forename'], $_POST['surname'], $_POST['password'])) {
// and so on
}
编辑:另一种风格(使用 MySQL 的 COUNT()
):
$stmt = "SELECT COUNT(username) FROM users WHERE username = ?";
$result = $dbcon->prepare($stmt);
$result->bind_param('s', $username);
$result->execute();
$result->bind_result($count);
$result->fetch();
if($count > 0) { // exists
} else {
// do something else
}