Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP检查数据库中是否存在值_Php_Mysql - Fatal编程技术网

PHP检查数据库中是否存在值

PHP检查数据库中是否存在值,php,mysql,Php,Mysql,我正在使用MySQL,我想检查用户输入的值$\u POST['username']是否已经存在于我的数据库中(在username字段中)。我尝试过以下代码: $usernameExists = "SELECT * FROM users WHERE username = " . $_POST['username']; if ($usernameExists) { echo "Exists" } 我把这个代码放在if(!empty…语句之后 但什么也没发生。如果您需要我的完整代码,可以

我正在使用MySQL,我想检查用户输入的值
$\u POST['username']
是否已经存在于我的数据库中(在
username
字段中)。我尝试过以下代码:

$usernameExists = "SELECT * FROM users WHERE username = " . $_POST['username'];

if ($usernameExists) {
    echo "Exists"
} 
我把这个代码放在
if(!empty…
语句之后

但什么也没发生。如果您需要我的完整代码,可以在这里找到,但我认为剩下的部分不会有帮助:

<?php

session_start();

if (isset($_SESSION['user_id'])) { // user is already logged in
    header("Location: index.php");
}

require('database.php');

$message = '';
$emailMessage = '';
$usernameMessage = '';
$passwordMessage = '';
$confirmMessage = '';

if (!empty($_POST['email']) && !empty($_POST['username']) && !empty($_POST['password']) && !empty($_POST['confirmPassword'])) { // user submitted form; enter user

    if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
        $emailMessage = 'Invalid email.';

    } elseif (strlen($_POST['username']) < 4 || strlen($_POST['username']) > 250) {
        $usernameMessage = 'Username has to be between 4 and 250 characters.';

    } elseif (!preg_match("/^[a-zA-z0-9]*$/", $_POST['username'])) {
        $usernameMessage = 'Username can only contain numbers and letters.';

    } elseif (strlen($_POST['password']) < 6 || strlen($_POST['password']) > 250) {
        $passwordMessage = 'Password has to be between 6 and 250 characters.';

    } elseif ($_POST['confirmPassword'] !== $_POST['password']) {
        $confirmMessage = 'Passwords don\'t match THONK';

    } else {
        $sql = "INSERT INTO users (email, username, password) VALUES (:email, :username, :password)";
        $stmt = $conn->prepare($sql);

        $stmt->bindParam(':email', $_POST['email']);
        $stmt->bindParam(':username', $_POST['username']);

        $password = password_hash($_POST['password'], PASSWORD_BCRYPT);
        $stmt->bindParam(':password', $password);

        if ($stmt->execute()) {
            $message = 'Successfully created new user: ' . $_POST['username'];
        } else {
            $message = 'There was an error lol';
        }
    }
}
?>

使用准备好的语句查询数据库。像这样:

 $usernameExists = 0;
 $sql = 'SELECT username FROM users WHERE username = :username';
 $stmt = $conn->prepare($sql);
 $stmt->bindValue(':username',$_POST['username']);
 $stmt->execute();

 if($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    // row(s) returned
    $usernameExists = 1;
 } else {
    // no row returned
    $usernameExists = 0;
 }
 $stmt->closeCursor();
然后你可以这样做:

if ($usernameExists) {
   echo "Exists"
} 

使用准备好的语句查询数据库。像这样:

 $usernameExists = 0;
 $sql = 'SELECT username FROM users WHERE username = :username';
 $stmt = $conn->prepare($sql);
 $stmt->bindValue(':username',$_POST['username']);
 $stmt->execute();

 if($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    // row(s) returned
    $usernameExists = 1;
 } else {
    // no row returned
    $usernameExists = 0;
 }
 $stmt->closeCursor();
然后你可以这样做:

if ($usernameExists) {
   echo "Exists"
} 

username=“.$\u POST['username']
是无效的SQL,并向您打开SQL注入。除非您的用户名都是整数。您当前使用我的名字的查询将是
SELECT*FROM username=chris85
。请像在其他地方一样对该查询进行参数化。您正在
INSERT
语句中使用准备好的语句。请对
SELEC执行相同的操作T
语句,您应该被设置。您是否曾经向DB发送过
$usernameExists
?如果没有,这是第一个问题。@Magnueriksson目前我并不担心准备好的语句。我只是想让它显示出来,但是我在OP中输入的语句不起作用。一旦我得到它,如果该用户名是ady存在,我会担心它的安全性;)@MuhammadUsman OP似乎在使用PDO,而不是mysqli的过程版本。即使OP使用了PDO,您的示例也是无效的。该函数有两个参数,第一个是数据库链接。
username=“$_POST['username']
是无效的SQL,并使您面临SQL注入。除非你的用户名都是整数。您当前对我的名字的查询将是
SELECT*FROM username=chris85
。像在其他地方一样参数化该查询。您正在
INSERT
语句中使用准备好的语句。对您的
SELECT
语句执行同样的操作,您应该被设置。您是否曾经向数据库发送
$usernameExists
?如果不是,那就是第一个问题。@MagnusEriksson目前我不担心准备好的语句。我只是想让它出现,但我在OP中的声明没有起作用。一旦我得到了回音,如果用户名已经存在,我会担心它是否安全;)@MuhammadUsman OP似乎在使用PDO,而不是mysqli的程序版本。即使OP使用了这个,你的例子也是无效的。该函数有两个参数,第一个是数据库链接。