让我直接解决我的问题,我在这里编写的代码没有写入我的数据库,我无法弄清楚为什么。目前我只是试图掌握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)
?>
答案 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]')";