php - MySQL数据库不始终发布内容

标签 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 之外,该页面没有收到任何其他明显的错误。

最佳答案

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

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

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

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

关于php - MySQL数据库不始终发布内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18820163/

相关文章:

php - 基于表单的数组

javascript - 使用 Ajax/JQuery/PhoneGab 重定向

PHP排序脚本

mysql - 如何在 MYSQL 中通过另一列选择具有 MAX(列值)、PARTITION 的行?

PHP & MySQL : How to get values between two dates including both of them

php - 如何回显/打印语句

php - 为人对人禁用 Laravel 复数

php - MySQL 未添加到数据库

php - 将列名称导出到 CSV

mysql - 忘记 MySQL 密码 OSX -- 重置教程不起作用