2011-04-30 42 views
0

此查询有什么问题?SQL和PHP问题

$query3 = "INSERT INTO Users 
      ('Token','Long','Lat') 
      VALUES 
      ('".$token."','".$lon1."','".$lat."')"; 
+0

你也使用mysql_query()执行它吗? – 2011-04-30 16:46:31

+0

请给我们完整的查询。我们怎么知道$ token,$ lon1和$ lat是什么? – Alp 2011-04-30 16:46:56

+3

我不知道。此查询有哪些*错误?即当你使用它时会发生什么? – 2011-04-30 16:47:08

回答

6

您有这几个问题保留字。

  1. 列名应BACKTICK逃脱了,没有报价(也早就是MySQL中的数据类型,因此它保留和必须被反引号转义)。
  2. 如果这些参数没有转义,那么您有SQL注入问题。
  3. 如果它不起作用,您应该向我们提供mysql_error()的结果。

尝试运行这段代码:

$token = mysql_real_escape_string($token); 
$lon1 = mysql_real_escape_string($lon1); 
$lat  = mysql_real_escape_string($lat); 

$query3 = "INSERT INTO `Users` (`Token`, `Long`, `Lat`) 
      VALUES ('{$token}', '{$lon1}', '{$lat}')"; 
$result3 = mysql_query($query3) or die("Query Error: " . mysql_error()); 

如果仍然无法正常工作,给我们的出品的错误消息。

+0

谢谢。这工作 – flaviusilaghi 2011-04-30 17:02:39

1
  1. 你周围使用字段名的单引号。这在我所知的任何SQL变体中都是无效的。要么摆脱它们,要么以正确的方式为SQL风格引用字段名称。
  2. 您的代码很可能具有SQL注入漏洞,除非您遗漏了可跳过$token等的代码
  3. 您不应该像这样将值放入SQL字符串中。这不是20世纪90年代 - 我们现在已经参数化查询。
  4. mysql_函数使正确查询有点困难。切换到mysqli或PDO。
4

Longmysql reserved word,需要反引号

$query3 = "INSERT INTO Users 
      (`Token`,`Long`,`Lat`) 
      VALUES 
      ('".$token."','".$lon1."','".$lat."')"; 
+0

..并将引号中的字段名称封闭_won't work_。 – 2011-04-30 17:09:33

+0

@Tom:这已经在我的答案中显示,但没有任何文字希望你也看到这个 – 2011-04-30 17:11:21

+0

@ShaktiSingh:_I_看到它。问这个问题的人看到了吗? – 2011-04-30 17:11:38