PHP查询字符串中的变量不起作用

时间:2017-04-21 14:01:06

标签: php mysql

当我使用PHP中的变量构建查询字符串时,它似乎不起作用。我目前的疑问是:

$u = "admin";
$hash = password_hash("password", PASSWORD_DEFAULT);
$set_login = "INSERT INTO users (username, password) VALUES ({$u}, {$hash})";

*我正在脚本中进一步执行查询

如果我将{$u}替换为它所代表的字符串文字,并将{$hash}替换为密码的字符串文字,例如password,则查询可以正常工作。但是,当我引入变量时它就会中断。我尝试分解查询字符串并使用连接运算符:

$set_login = "INSERT INTO users (username, password) VALUES ( " . $u . ", " . $hash . ")";

这也不起作用。然后我认为它可能是哈希的东西,所以我将代码修改为(用于测试):

$u = "admin";
$p = "password";
$set_login = "INSERT INTO users (username, password) VALUES ({$u}, {$p})";

这也不起作用。

2 个答案:

答案 0 :(得分:1)

最好的解决方案是使用prepared statements,这非常简单。

这里是如何使用预先准备好的陈述

mysqli

<?php
$u = "admin";
$hash = password_hash("password", PASSWORD_DEFAULT);
$set_login = "INSERT INTO users (username, password) VALUES (?,?)";
$query = $ConnectionString->prepare($set_login);
$query->bind_param("ss",$u,$hash);

if($query){
    echo "success";
}else{

    error_log("error".$ConnectionString->error);
}

?>

<强> PDO

<?php
$u    = "admin";
$hash = password_hash("password", PASSWORD_DEFAULT);

$query = $ConnectionString->prepare("INSERT INTO users (username, password) VALUES (?,?)")->execute(array($u,$hash));

if ($query) {
    echo "success";
} else {

    error_log("error" . $ConnectionString->errorInfo());
}

?>

一些有用的资源。

PDO Connection PDO Tutorials Mysqli Prepared

  

注意:周杰伦在评论中表示确保您的密码字段   数据库中的大小至少为60个字符

在您的查询中,问题是您没有将字符串包装在引号

周围

您的查询应该是:

$set_login = "INSERT INTO admin (uname, upass) VALUES ('{$u}', '{$hash}')";

但这不是推荐的最佳推荐方法,您应该使用上述方法之一使用预处理语句。

这就是为什么你应该: Bobby Tables

答案 1 :(得分:0)

INSERT INTO users (username, password) VALUES ('{$u}', '{$hash}')

不要忘记用引号包装字符串

但正如评论中所提到的,直接放置数据,使用预备语句

是个坏主意