SQL和PHP问题

时间:2011-04-30 16:44:56

标签: php mysql sql

此查询有什么问题?

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

3 个答案:

答案 0 :(得分:6)

你有几个问题。

  1. 列名称应该是反引号转义,而不是引用(LONG也是MySQL中的数据类型,因此保留,必须进行反引号转义)。
  2. 如果没有转义这些参数,则会出现SQL注入问题。
  3. 如果mysql_error()无效,您应该向我们提供结果。
  4. 尝试运行此代码:

    $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());
    

    如果仍然无效,请向我们提供生成的错误消息。

答案 1 :(得分:4)

Longmysql reserved word,保留字需要用反引号括起来

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

答案 2 :(得分:1)

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