INSERT INTO数据库表,从表单不起作用。 SQL

时间:2011-08-18 09:44:32

标签: php sql database

让我直接解决我的问题,我在这里编写的代码没有写入我的数据库,我无法弄清楚为什么。目前我只是试图掌握php和sql所以除了学习之外没有任何意义。这是我得到的错误(第一句'连接到数据库'来自我的if语句):

“连接到databaseError:您的SQL语法中有错误;请查看与您的MySQL服务器版本对应的手册,以便在''test'('name')VALUES('daniel')附近使用正确的语法在第1行“

我的代码可能看起来有点令人困惑,因为其中一些来自w3schools,有些来自朋友。我无法弄清楚为什么这段代码不起作用,我已经尝试了很多基于我​​在网上找到的文章和stackoverflow的语法变体,但似乎都没有。我担心也许我甚至不是连接到数据库,尽管我的if语句告诉我,否则这可能是个问题?

希望如果这个问题得到解决,这个问题将澄清数据库连接并在一次点击中从表单写入数据库。先谢谢你们,这是我的代码。

HTML

<form action="insert.php" method="post">
Name: <input type="text" name="namefield" />
<input type="submit" />
</form>

PHP(insert.php)

<?php
$dbhost  = 'localhost';
$dbname  = 'carbon_db';
$dbuser  = 'username';
$dbpass  = 'password'; 

$con = mysql_connect($dbhost, $dbuser, $dbpass);

if($con == FALSE)
{
    echo 'Cannot connect to database' . mysql_error();
}
else
{
    echo 'Connected to database';
}

mysql_select_db($dbname, $con);


$sql="INSERT INTO 'test' ('name') 
VALUES ('$_POST[namefield]')";

if (!mysql_query($sql, $con))
{
    die('Error: ' . mysql_error());
}
echo "1 record added";

mysql_close($con)
?>

5 个答案:

答案 0 :(得分:6)

在表名周围删除引号或将其更改为后退标记:

变化:

$sql="INSERT INTO 'test' ('name') VALUES ('$_POST[namefield]')";

要:

$sql="INSERT INTO test ('name') VALUES ('$_POST[namefield]')";

或者

$sql="INSERT INTO `test` ('name') VALUES ('$_POST[namefield]')";

答案 1 :(得分:4)

对于MySQL来说,通常最好使用反引号,就像任何其他存储引擎一样,它拥有自己的保留名称,并且它是自己的保留插入实践。

尝试

$sql = "INSERT INTO `test` (`name`) VALUES ('".$_POST['namefield']."')";

答案 2 :(得分:3)

将表名和列名周围的单引号更改为反引号。或者一起摆脱它们。

$sql="INSERT INTO `test` (`name`)  VALUES ('{$_POST['namefield']}')";

此外,不要在不使用$_POST语法或分解字符串的情况下直接在字符串中引用关联数组({}) - 您所做的就是发出 E_NOTICE 应该避免。

Read this彻底 - 你会惊讶于你可以(而且不能)在PHP字符串中合法地做...

答案 3 :(得分:2)

在引用表/列名称时尝试使用`而不是'

$sql="INSERT INTO `test` (`name`) 
VALUES ('$_POST[namefield]')";

答案 4 :(得分:1)

删除sql语句周围的单引号并替换为back-tics(不确定是否有必要):

$sql="INSERT INTO `test` ('name') 
VALUES ('$_POST[namefield]')";