2015-04-02 77 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