查询无效 - 插入INTO

时间:2013-10-04 07:34:03

标签: php mysql insert

所以我最近开始学习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();
    }

}

由于某种原因,它没有添加我的数据库的任何数据。我与我的数据库的连接工作正常,我在查询中没有看到错误。

有人在此代码中看到错误吗?或者可以帮我解决问题?

7 个答案:

答案 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。它会自动插入。