2017-04-21 110 views
0

当我使用PHP中的变量构建查询字符串时,它似乎没有工作。我当前的查询是: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

使用准备语句来代替 –

+1

这实在是一般的差的方法,你应该使用**准备语句**。但是,请尝试将**引号**添加到查询中。像''INSERT INTO用户(用户名,密码)VALUES('{$ u}','{$ hash}')“;' – FirstOne

+0

请确保密码栏至少为60个字符,否则您将遇到问题试图验证密码。 –

回答

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

注:AS周杰伦在他的评论中已经指出确保您的密码字段 大小在数据库中至少60个字符

在您的查询问题是你没有将字符串包装在报价中

你的查询s应该是:

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

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

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

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

不要忘了包串用引号

但正如评论所说,它的坏主意,直接把数据,利用准备好的语句

相关问题