select查询中的小问题,检查数据库MySQL / PHP中是否已存在表单数据

时间:2017-07-12 15:56:26

标签: php mysql database

我正在创建一个注册页面,在将数据插入我的数据库之前,我需要检查它是否已经存在,但我生成的SQL请求缺少一个'最后。

SELECT * from users where firstname = 'Bob' and lastname = 'Smith' and 
username = 'bobsmith' and email = 'bob@test.co.uk' and password = 'testing1

没有'显示密码后。

这是我的PHP代码:

$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$username = $_POST['username'];
$email = $_POST['email'];
$password = $_POST['password'];

$query1 = "SELECT * from users where firstname = '" .
    $firstname .
    "' and lastname = '" . 
    $lastname . 
    "' and username = '" .  
    $username .
    "' and email = '" . 
    $email . 
    "' and password = '" . $password;

echo "<BR>Running query ... <BR>" . $query1;
$result1 = mysqli_query($cxn,$query1);
$numrows1 = mysqli_affected_rows($cxn);

我已尝试在密码末尾添加引号,例如. $password . '";,但这会使下面的其余代码变得灰暗,因此无法正常工作。我该如何解决这个问题?

更新:我知道这不是最安全的方式,但这是一个单一的任务,这就是我们打算这样做的方式。

1 个答案:

答案 0 :(得分:1)

以下是使用MySQLi预处理语句执行查询的一种方法:

$username = $_POST['username'];
$password = $_POST['password'];

$cxn= mysqli_connect($host, $user, $password, $database);

/* check connection */
if (!$cxn) {
    echo mysqli_connect_error();
    exit();
}

/* prepare the query */    
$stmt = mysqli_prepare($cxn, "SELECT * FROM users WHERE username = ?"); // assuming username is unique
$stmt->bind_param('s', $username);

/* execute prepared statement */
$result = $stmt->execute();
$stmt->store_result(); 

/* get the user info */
$user = $result->fetch_assoc();

如果您使用 PHP的built-in functions 来处理密码安全性,则可以使用{{{} $password将存储的密码与password_verify($password, $user['stored_hash'])进行比较1}}。 确保为散列密码正确设置数据库。

如果您使用的PHP版本低于5.5,则可以使用password_hash() compatibility pack

没有必要escape passwords 或在散列之前对它们使用任何其他清理机制。这样做更改密码并导致不必要的额外编码。