所以我最近开始学习PHP,现在我试图将代码放入我的数据库。 数据通过表单从用户输入。
这是我的代码:
if(isset($_POST['submit'])) {
$blogtitle = $_POST['blogTitle'];
$blogcategory = $_POST['blogCategory'];
$blogcontent = $_POST['blogContent'];
// aanmaak date van de blog
$blogdate = date("d/m.Y");
// Checkt of alle velden zijn ingevuld
if (!empty($blogtitle) && !empty($blogcategory) && !empty($blogcontent)) {
//echo "je zit nu bij de query";
$addBlogQuery = mysql_query("INSERT INTO blog (blog_ID, blog_title, blog_category, blog_content, blog_date)
VALUES (NULL, $blogtitle, $blogcategory, $blogcontent, blogdate )");
if ($addBlogQuery) {
echo "blog added successfully";
}
else {
echo "something went wrong";
}
}
else {
$this->notFilledErrorAction();
}
}
由于某种原因,它没有添加我的数据库的任何数据。我与我的数据库的连接工作正常,我在查询中没有看到错误。
有人在此代码中看到错误吗?或者可以帮我解决问题?
答案 0 :(得分:3)
INSERT
语句中存在语法错误:
$addBlogQuery = mysql_query("INSERT INTO blog (blog_ID, blog_title, blog_category, blog_content, blog_date)
VALUES (NULL, $blogtitle, $blogcategory, $blogcontent, blogdate )");
You are missing a $ here------------------------^
您还需要将变量包装在'
单引号中:
$addBlogQuery = mysql_query("INSERT INTO blog (blog_ID, blog_title, blog_category, blog_content, blog_date)
VALUES (NULL, '$blogtitle', '$blogcategory', '$blogcontent', '$blogdate' )");
此外,现在不推荐使用mysql_ * API。 请阅读大红框here。您现在应该开始使用MySQLi或PDO,同时它仍然相对容易更改。
答案 1 :(得分:2)
您需要用单引号('
)括起字符串,日期和DATETIME值。
你还没有附上你的SQL。
请将您的SQL修改为:
$addBlogQuery = mysql_query("INSERT INTO blog (blog_ID, blog_title, blog_category, blog_content, blog_date)
VALUES (NULL, '$blogtitle', '$blogcategory', '$blogcontent', 'blogdate' )");
答案 2 :(得分:2)
Mysql仅支持以下日期格式:
YYYY-mm-dd
但您的代码格式不同
$blogdate = date("d/m.Y");
尝试以下方法:
<强> $blogdate = date("Y-m-d");
强>
你已经传递了ID null,我认为你已经选择了ID作为主键。主键不能为空。如果您的ID字段支持自动增量,则无需传递任何内容。
$addBlogQuery = mysql_query("INSERT INTO blog (blog_title, blog_category, blog_content, blog_date)
VALUES ($blogtitle, $blogcategory, $blogcontent, blogdate )");
希望它会奏效。
答案 3 :(得分:2)
请参阅以下更改并重试:
$blogdate = date("Y-m-d");
$addBlogQuery = mysql_query("INSERT INTO `blog` (`blog_title`, `blog_category`, `blog_content`, `blog_date`)
VALUES ('$blogtitle', '$blogcategory', '$blogcontent', '$blogdate' )");
答案 4 :(得分:2)
使用更安全的方式,使用PDO - 停止使用MYSQL_*
它已被弃用
PDO自行转义,您不需要使用mysql_real_escape_string
<?php
$user="root";
$pass="";
$db = new PDO('mysql:host=hostname;dbname=databasename', $user, $pass); //establish new connection
$sql ="INSERT INTO blog (blog_ID, blog_title, blog_category, blog_content, blog_date)
VALUES (NULL, ?, ?, ?, ?)";
try{
$stmt = $db->prepare($sql);
$stmt->execute(array($a, $b, $c, $d));
if($stmt->rowCount()>0){
//done
}
}catch(PDOException $e){
echo $e->getMessage();
?>
在插入数据库之前,您应该清理数据以防止SQL注入和XSS。使用此功能:
function sanitize($data){
$data= htmlentities(strip_tags(trim($data)));
return $data;
}
答案 5 :(得分:2)
尝试以下查询没有必要使用php date
函数mysql原生支持日期和时间函数
INSERT INTO blog
(`title`, `category`, `content`, `date`, `id`)
VALUES
('Title here', 'category here','blog content here', NOW(), 1);
这是SQL测试SQL Fiddle
答案 6 :(得分:1)
$addBlogQuery = mysql_query("INSERT INTO blog (blog_title, blog_category, blog_content, blog_date) VALUES ($blogtitle, $blogcategory, $blogcontent, blogdate )");
您的错误似乎是blog_id
的{{1}}值。 NULL
列是主键。如果您按blog_id
插入blog_id
,则数据无法推送到您的数据库。由于NULL
是主键,因此您无需手动插入blog_id
。它会自动插入。