2017-08-22 43 views
0

我有一个页面,更新特定用户的数据。用户有位置,这是一个外键。查询更新(下面)没有位置工作正常,但与位置我得到以下错误。PHP:在更新语句错误与子查询

查询:

错误查询:您的SQL语法错误;检查对应于你的MySQL服务器版本正确的语法近 使用“SELECT positionid FROM visitorsystem.position WHERE positionName LIKE‘%INFORMAT’在行3

我试图适合我的方式手动 通过使用内部连接,因为我已经看到了一些在这里给出的解决方案,但没有任何工作。有什么建议么 ?

+0

你的子查询不应该引号之间,但括号之间 –

+1

** WARNING **:当使用'mysqli'你应该使用[参数化查询(http://php.net/manual/en/mysqli。 quickstart.prepared-statements.php)和['bind_param'(http://php.net/manual/en/mysqli-stmt.bind-param.php)来添加用户数据查询。 **不要**使用字符串插值或连接来完成此操作,因为您创建了严重的[SQL注入漏洞](http://bobby-tables.com/)。 **不要**将'$ _POST','$ _GET'或**任何**用户数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。 – tadman

+0

注:面向对象的接口,以'mysqli'是显著更简洁,使代码更容易阅读和审核,并且不容易过时的'mysql_query'接口混淆。在你过于投入程序风格之前,它是值得转换的。例如:'$ db = new mysqli(...)'和'$ db-> prepare(“...”)过程接口是PHP4时代的一个神器,当引入mysqli API时,不应该在新的代码 – tadman

回答

1

子查询的潜规则括号,没有引号内,所以在一般意义上:

SELECT x FROM y WHERE z IN (SELECT z FROM a) 

单引号和双引号(默认)是字符串值。

+0

我在括号中曾尝试以及可惜仍然无法工作 – Chanter

+1

“不会工作”是不是一个有用的诊断。你可能有其他问题,请检查您的错误日志的详细信息。获取* *的东西,我们可以用它来帮助你。 – tadman

+0

我试图把括号多次全子查询和解析错误给予我关闭我的浏览器,并再次申请的变化,不知它做了一个差异,工作这段时间,非常令人迷惑..感谢帮助:)!我也会注意安全问题,谢谢指出 – Chanter