mySQL查询语法错误?

时间:2012-07-19 14:35:21

标签: php mysql

我在wordpress网站上有联系表格,由ajax发送,并发送到我的邮箱。我也想将结果保存在数据库中,所以我写了这个查询,但它给了我和语法错误,但我在这段代码中找不到任何错误:

<?php 
$con = mysql_connect("localhost","username","password");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("u31272B3", $con);

$sql="INSERT INTO wp_contactform (Nimi, Puhelin, E-mail, Viesti, IP, Day)
VALUES
('$_POST[Nimi]','$_POST[Puhelin]','$_POST[Sposti]','$_POST[Tiedot]','$_POST[Gotcha]','$_POST[Day]')";

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

mysql_close($con);

?>

发送它的jquery脚本有效,并且邮件已发送,但这不会保存。

4 个答案:

答案 0 :(得分:2)

使用反引号(`)引用列名电子邮件。 MySQL目前正在分两部分解释这一点。

另请注意,(根据我的评论)您的代码对SQL injection攻击持开放态度。使用正确的参数化SQL查询要好得多。


SQL注入示例:

"INSERT INTO table (field) VALUE ('$_POST[var]')"

如果您发布值"'; DROP TABLE table; --",那么您有一个插入空字符串的有效SQL字符串,然后尝试删除该表。替换你想要的任何有害言论。

答案 1 :(得分:1)

并且您还应该使用mysql_real_escape_string()或预处理语句。如果您的查询数据有任何特殊字符,它可以打破您的查询,它也可以帮助您从SQL注入。

http://php.net/mysql_real_escape_string http://php.net/pdo

答案 2 :(得分:0)

您的SQL请求应写成如下:

$sql = "INSERT INTO wp_contactform (`Nimi`, `Puhelin`, `E-mail`, `Viesti`, `IP`, `Day`)
        VALUES
        ('$_POST[Nimi]','$_POST[Puhelin]','$_POST[Sposti]','$_POST[Tiedot]','$_POST[Gotcha]','$_POST[Day]')"

使用非字母数字字符的SQL字段必须使用反引号进行转义(`

答案 3 :(得分:0)

这应该有效

<?php
$con = mysql_connect("localhost", "username", "password");
if(!$con){
    die('Could not connect: '.mysql_error());
}

mysql_select_db("u31272B3", $con);

$sql = "INSERT INTO wp_contactform (`Nimi`, `Puhelin`, `E-mail`, `Viesti`, `IP`, `Day`)
VALUES
('".mysql_real_escape_string($_POST['Nimi'])."','".
   mysql_real_escape_string($_POST['Puhelin'])."','".
   mysql_real_escape_string($_POST['Sposti'])."','".
   mysql_real_escape_string($_POST['Tiedot'])."','".
   mysql_real_escape_string($_POST['Gotcha'])."','".
   mysql_real_escape_string($_POST['Day'])."')";

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

mysql_close($con);