0

我有一个使用 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 之外,该页面没有收到任何其他明显的错误。
4

1 回答 1

0

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

在这个特定的例子中,它可能是导致 MySQL 失败的日期格式。MySQL 希望日期要么用内部破折号('YYYY-MM-DD')引用,要么完全不带任何分隔符(YYYYMMDD)。

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

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

于 2013-09-16T04:33:36.550 回答