字符串似乎结束查询

时间:2013-05-22 12:28:37

标签: php sql database postgresql

我在facebook的postgres数据库中存储用户喜欢的页面,其中一个是Sinead O'Connor的页面。看起来当它到达撇号时,它会终止查询,因为撇号匹配,因此会导致错误:

  $json_likes=json_encode($likes);
  echo $json_likes;
  $query = "UPDATE public.account_recover_users SET user_likes='$json_likes' WHERE user_mail='$email'";
  $result = pg_query($query);
  if(!$result)
      exit('{ "status": false }');
  else exit('{ "status": true }');

现在我得到的是:

Warning: pg_query() [<a href='function.pg-query'>function.pg-query</a>]: Query failed: ERROR: syntax error at or near &quot;Connor&quot; LINE 1: ...l&quot;,&quot;page_id&quot;:&quot;243440865683470&quot;},{&quot;name&quot;:&quot;Sinead O'Connor&quot;,&quot;p... 

知道我应该怎么处理这个?我的应用程序的用户可能在他们喜欢的页面中有各种各样的字符。

2 个答案:

答案 0 :(得分:5)

很高兴您没有尝试存储Bobby Tables的页面。你的应用程序很容易被SQL Injection - 为了你自己的利益而逃避撇号。

TL; DR:您附加的文本中的撇号与应用程序中硬编码的文本匹配,格式错误的SQL命令。因此错误。

修改:从评论中移动此处。这是a good guide on how to prevent SQL Injection in PHP

答案 1 :(得分:0)

你在json字符串中有单引号,它会破坏查询。至少使用addslashes($json_likes)addslashes($email)