2015-02-08 100 views
-1

您好我有以下查询使用CONCAT:如何在更新查询

$sql = "update zzz_users set password = "'".$encrypted."' where username = '".$email."'"; 
CustomQuery($sql); 

而我只是不能得到CONCAT正确的,可能有人请告诉我该怎么办呢

+1

无法看到你在哪里使用concat? – Mihai 2015-02-08 18:25:57

回答

0

正确的查询是:

$sql = "update zzz_users set password = '" . $encrypted . "' where username = '" . $email . "'"; 
+0

正确的查询没有这个''“。$ encrypted。”“,而不是它应该准备查询。 – VeeeneX 2015-02-08 18:29:10

+1

@VeeeneX:问题是关于PHP语法,我们不知道'CustomQuery'函数做了什么以及变量是什么。在'$ ecnrypted'中可以转义和散列密码,那么一切都会好起来的。 – panther 2015-02-08 18:31:34

+0

永远不要相信用户功能。 – VeeeneX 2015-02-08 18:35:04

-1

有一个"password =后太多。在将它写入数据库之前,应该先将字符串转义出来,否则可能会导致SQL注入问题。

$sql = "update zzz_users set password = '" .mysql_real_escape_string($encrypted). "' where username = '" .mysql_real_escape_string($email). "'"; 
CustomQuery($sql); 
+1

Passowrd必须被散列,'_real_escape_string'不是正确的方法(它可能在这个var中被散列,我们不知道)。 'Mysql'扩展名已被弃用。 – panther 2015-02-08 18:33:17

0

这里还有很多错误比没有获得连接权。

首先,如果你只是试图把变量到PHP中的字符串,可以考虑使用双引号,并直接把变量到字符串:

$sql = "UPDATE `zzz_users` SET `password` = $encrypted WHERE `username` = $email"; 

没有必要对所有的起点并在这种情况下停止串。

但是,由于SQL Injection attacks,你在这里做的事情是非常危险的。您应该肯定不是将变量直接放入您的SQL命令。

这样做的最好方法是使用知道如何接受格式化字​​符串并为您创建安全SQL的库。例如,像MeerkoDB会让你写这SQL说法是这样的:

DB::query("UPDATE `zzz_users` SET `password`=%s WHERE `username`=%s", $encrypted, $email); 

这实际上是安全的,因为这将确保SQL是正确转义,防止SQL注入攻击。当然,你可以推出自己的逃跑游戏,但使用一个完善的图书馆(有许多免费/开源和商业/专有产品)几乎总是一个更好的主意。

+0

请阅读豹的回答和意见。 – VeeeneX 2015-02-08 19:02:16