我的php / mysql代码有什么问题?

时间:2012-12-07 18:06:35

标签: php mysql

我正在玩一种博客。我收到错误,当我说:

我的PHP如下:

    $query = "INSERT INTO articles (articleTitle, articleType, articleText, userID)
        VALUES('$articleTitle', '$articleType', '$articleText', '$userID')";

    $result = mysql_query($query);

    var_dump($articleTitle);
    var_dump($articleType);
    var_dump($articleText);
    var_dump($userID);

    var_dump($result);

    echo mysql_error();

我的结果是:

    string 'New News! (Sounds like noo noo's)' (length=33)
    string 'News' (length=4)
    string 'NEWS is here! This is Michael Bender reporting on the new news that we now have news! Isn't that exciting news?' (length=111)
    string '1' (length=1)
    boolean false
  

您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   's'附近,'新闻','新闻就在这里!这是Michael Bender的报道   第2行的新消息

那么为什么mysql不接受我的查询呢?谢谢!

3 个答案:

答案 0 :(得分:3)

您必须使用mysql_real_escape_string转义传递给mysql_query的所有变量。此外,您可能想要使用PDO或mysqli。

答案 1 :(得分:1)

这会破坏您的查询:

  

字符串'新闻! (听起来像noo noo)'(长度= 33)

单引号'

在查询中使用它们之前,您需要转义值。或者您将成为Sql Injection

的受害者

示例:

$query = "INSERT INTO articles (articleTitle, articleType, articleText, userID)
        VALUES('%s', '%s', '%s', %d)";

$query = sprintf($query,
   mysql_real_escape_string($articleTitle),
   mysql_real_escape_string($articleType), 
   mysql_real_escape_string($articleText), 
   (int) $userID); // assuming your userId is an integer

答案 2 :(得分:0)

对您的数据使用mysql_real_escape_string(),因为它会阻止您的查询崩溃,因为它们包含特殊字符。