2013-10-04 62 views
0

因此,我最近开始学习PHP,现在我试图将代码到我的数据库。 数据通过表单从用户输入。查询不起作用 - INSERT INTO

这里是我的代码:

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(); 
    } 

} 

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

有人在此代码中看到错误吗?或者可以帮助我找出问题所在?

+3

尝试包装你的变量(在查询中)在''s –

+4

*旁注:*停止使用已弃用的'mysql_ *'函数。改用MySQLi或PDO。 – Raptor

+1

试试这个:'echo“出错了”。 '' – hjpotter92

回答

2

您的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,但它仍然相对容易更改。

+0

Thx!这实际上解决了我的问题!从这个错误中学到了很多!不会忘记即将发布的单引号! =) – Kevinvhengst

+0

不用担心,但是请注意,请停止使用mysql_query。开始使用不赞成使用的接口是一个好主意,PDO或MySQLi会好很多。他们还将帮助您防止代码中存在的SQL注入漏洞。我在答复中提供的链接中有信息。 –

1

您需要用单引号括起字符串,日期和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')"); 
+0

这解决了我的问题!完全忘了''.. Thx! – Kevinvhengst

1

支持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)"); 

希望它能起作用。

+0

这不是解决问题的方法,但这是我的新信息,thx !! =) – Kevinvhengst

+0

为什么使用'date'函数你认为值得吗?mysql有本地支持日期时间ie'NOW ()'function。 – Shushant

1
$addBlogQuery = mysql_query("INSERT INTO blog (blog_title, blog_category, blog_content, blog_date) VALUES ($blogtitle, $blogcategory, $blogcontent, blogdate)"); 

看来你的错误是NULL插入的blog_id值。主键是blog_id列。如果您通过NULL插入blog_id,则数据无法推送到您的数据库。由于blog_id是主键,因此不需要手动插入blog_id。它会自动插入。

+0

是的,blog_ID是我的主键,但是你说我不需要给它'NULL'来让它自动得到它的id?现在它工作正常,每次都自动添加ID号 – Kevinvhengst

1

请参阅下面的变化,然后再试一次:

$blogdate = date("Y-m-d"); 
$addBlogQuery = mysql_query("INSERT INTO `blog` (`blog_title`, `blog_category`, `blog_content`, `blog_date`) 
           VALUES ('$blogtitle', '$blogcategory', '$blogcontent', '$blogdate')"); 
1

使用更安全的方法,使用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; 
} 
1

尝试下面的查询有没有需要使用PHP date功能MySQL不得不日期和时间函数

INSERT INTO blog 
(`title`, `category`, `content`, `date`, `id`) 
VALUES 
('Title here', 'category here','blog content here', NOW(), 1); 

原生支持这里是SQL测试SQL Fiddle