我有一个使用 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/