其他人已经给你答案。要添加,您使用的列名应该是反引号或完全删除引号。
变化:
INSERT INTO orders ('name', 'tacoOrder')
^^^ ^
到
INSERT INTO orders (`name`, `tacoOrder`)
或
INSERT INTO orders (name, tacoOrder)
或作为一个完整的答案:
$name = $_POST['name'];
$tacoOrder = $_POST['tacoOrder'];
$query = "INSERT INTO orders (`name`, `tacoOrder`) VALUES ('$name', '$tacoOrder')";
旁注:反引号不是必需的,但不能使用列名的单引号。这只是一种习惯性的力量,我自己对列名使用反引号。
另外,这$mysql_close();
不应该在mysql_close
前面$
但$link
括号内:
更改为mysql_close($link);
然而由外国人先生指出,为mysql_close()
的变量是可选的(感谢对于)
你也有一个失踪if(!mysql_query($query)
)
应理解为if(!mysql_query($query))
是否考虑使用预处理语句或PDO切换到mysqli_*
函数。 mysql_*
函数已被弃用,并将从未来版本中删除。
完全重写:(测试和工作我的服务器上)
<?php
define('DB_NAME', 'tacoPractice');
define('DB_USER', 'root');
define('DB_PASS', 'root');
define('DB_HOST', 'localhost');
$link = mysql_connect(DB_HOST, DB_USER, DB_PASS);
if(!$link)
{
die('Could not connect to database: ' . mysql_error());
}
$db_select = mysql_select_db(DB_NAME);
if(!$db_select)
{
die('Can\'t use ' . DB_NAME . ': ' . mysql_error());
}
echo "HOLY EFF";
$name = $_POST['name'];
$tacoOrder = $_POST['tacoOrder'];
$query = "INSERT INTO orders (name, tacoOrder) VALUES ('$name', '$tacoOrder')";
if(!mysql_query($query))
{
die("DAMMIT");
}
else{ echo "Success"; }
mysql_close();
?>
您也可以使用此方法,则略有不同:
$query = mysql_query("INSERT INTO orders (name, tacoOrder) VALUES ('$name', '$tacoOrder')");
if (!$query) {
die('Invalid query: ' . mysql_error());
}
else{ echo "Success"; }
脚注:
由于您没有检查表单元素是否为空,您有可能会获取空数据条目。
你可以使用一个条件语句的效果:
if(!empty($_POST['name']) || !empty($_POST['tacoOrder']))
{
// continue with code processing
}
另外,使用什么Awlad提到了his answer
在关于使用mysql_real_escape_string()
你也可以在这里SO How can I prevent SQL injection in PHP?
读的好文章
这里是一个(基本)mysqli_*
为基础的方法与mysqli_real_escape_string()
函数和一个条件语句来检查是否有任何字段为空。
如果其中一个字段留空,则查询将不会执行。
<?php
define('DB_NAME', 'tacoPractice');
define('DB_USER', 'root');
define('DB_PASS', 'root');
define('DB_HOST', 'localhost');
$link = mysqli_connect(DB_HOST, DB_USER, DB_PASS);
if(!$link)
{
die('Could not connect to database: ' . mysqli_error());
}
$db_select = mysqli_select_db($link,DB_NAME);
if(!$db_select)
{
die('Can\'t use ' . DB_NAME . ': ' . mysqli_error());
}
echo "HOLY EFF";
$name = mysqli_real_escape_string($link,$_POST['name']);
$tacoOrder = mysqli_real_escape_string($link,$_POST['tacoOrder']);
if(!empty($_POST['name']) || !empty($_POST['tacoOrder'])){
$query = "INSERT INTO orders (name, tacoOrder) VALUES ('$name', '$tacoOrder')";
if(!mysqli_query($link,$query))
{
die("DAMMIT");
}
else{ echo "Success"; }
mysqli_close($link);
}
?>
没有一个是sql保留的关键字,所以你不需要反引号,而且,变量对于'mysql_close()'是可选的'http://in1.php.net/mysql_close和aaaah我没有看到引用表名,会删除我的,并upvote你的,但你可以删除不必要的部分你的答案 –
我说的是列名,而不是保留字。它们不能用引号包裹,但反引号。 @ Mr.Alien VALUES是,但不是列名。 –
是的,但反引号不需要在这里,如果我们使用MySQL保留关键字作为列名,它们会被使用 –