2015-04-02 54 views
0

我试图使用下面的代码,但它给了我错误。PHP SQL语句不接受变量

代码:

$id = $_GET['id']; 
$action = '['command'=>'get','target'=>'location']'; 

$query = "UPDATE ZeusUsers SET action = '$action' WHERE notification_id = '$id'"; 
$result = mysqli_query($link,$query) or exit("Error in query: $query. " . mysqli_error()); 

错误:

Parse error: syntax error, unexpected 'command' 

如果我改变$行动标准的文字语句工作正常,它只是似乎与单引号和方括号问题。

我也尝试过在单引号前使用\,它仍然失败。

任何想法?

+0

这个$动作应该是什么?语法完全被破坏。它应该是一个数组吗? – Erik 2015-04-02 13:44:33

+0

这是我以后需要调用的JSON,因此将其存储在数据库中,直到需要调用它为止。 – 2015-04-02 13:46:09

+0

如果'$ id'是一个int,那么这是防止注入的最小值。 '$ id =(int)$ _ GET ['id'];'。其他防止注入的方法,http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php – chris85 2015-04-02 13:53:01

回答

2

让PHP构建JSON字符串为您

$action = json_encode(array('command'=>'get','target'=>'location')); 

你开始和回采一个字符串与单引号所以PHP是解释command为PHP代码,但它不知道该关键字是什么。

+0

产生以下错误:'警告:mysqli_error()期望恰好1个参数,0在第10行的/assets/scripts/location.php中给出 查询中的错误:UPDATE ZeusUsers SET action ='['command'=>'get','target'=>'location']'WHERE notification_id =' 1111' 。 ' – 2015-04-02 13:52:30

+0

在所有单引号之前使用\并且似乎解决它!谢谢! – 2015-04-02 13:54:04

+0

刚刚注意到你是如何在查询中插入$ action变量的。你真的应该在那里使用准备好的语句。这将解决问题并且更安全。 – 2015-04-02 18:51:55