我有一个使用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
在任何人陈述一些明显的解决方案之前,让我说明以下内容
答案 0 :(得分:0)
您的代码可能会以无数种方式失败,因为有无数的无效输入可用于构建您发送到数据库的SQL字符串。
在这个特定的例子中,它可能是导致MySQL失败的日期格式。 MySQL希望日期用内部短划线('YYYY-MM-DD')引用或不带引号而没有任何分隔符(YYYYMMDD)。
此外,任何包含单引号的文本输入都将导致您生成的SQL无效。还有其他字符和字符串(用于注释的双击,转义字符)可能会导致SQL无效。
但最大的问题是,恶意用户可能会在其中一个文本输入中插入一些东西,这会导致生成的SQL语句既有效又具有破坏性(如删除博客文章表或类似内容)。要避免这种情况,请学习如何使用参数化SQL语句,而不是动态地将SQL构建为文本字符串。