MySQL数据库不是始终发布内容

时间:2013-09-16 03:52:32

标签: php mysql

我有一个使用php / mysql创建的简单博客。当我创建帖子时,sql并不总是从博客帖子中插入发布的内容。

$blogTitle = $_POST[blogTitle];
$blogText = $_POST[blogText];
$blogTags = $_POST[blogTags];
$today = date("F j Y");
$createPostSQL = mysqli_query($con,"INSERT INTO blog_data (blog_title, blog_text, blog_date, blog_tags, popularity) VALUES ('$blogTitle', '$blogText', $today, '$blogTags', 10)");
if (!mysqli_query($con,$createPostSQL))
  {
  die('Error: ' . mysqli_error($con));
  }
echo "1 record added";
  }

我收到了以下我无法理解的mysqli_error。

Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '16 2013, 'test', 10)' at line 1

在任何人陈述一些明显的解决方案之前,让我说明以下内容

  • 与数据库的连接很好。
  • 来自另一个页面的POST正在接收该信息,这也正常。
  • 除了上面提到的mysql_error之外,该页面没有收到任何其他明显的错误。

1 个答案:

答案 0 :(得分:0)

您的代码可能会以无数种方式失败,因为有无数的无效输入可用于构建您发送到数据库的SQL字符串。

在这个特定的例子中,它可能是导致MySQL失败的日期格式。 MySQL希望日期用内部短划线('YYYY-MM-DD')引用或不带引号而没有任何分隔符(YYYYMMDD)。

此外,任何包含单引号的文本输入都将导致您生成的SQL无效。还有其他字符和字符串(用于注释的双击,转义字符)可能会导致SQL无效。

但最大的问题是,恶意用户可能会在其中一个文本输入中插入一些东西,这会导致生成的SQL语句既有效又具有破坏性(如删除博客文章表或类似内容)。要避免这种情况,请学习如何使用参数化SQL语句,而不是动态地将SQL构建为文本字符串。