使用php插入Mysql的正确语法

时间:2013-04-28 20:52:57

标签: php mysql insert

我正在尝试使用通过php

在表单上发布的信息将一些值插入到数据库中

以下是我用于插入的代码

     $query=mysql_query("select * from poll_question where question = '$question'") or die(mysql_error()); 

    $numrows=mysql_num_rows($query);
     if($numrows)
{
    while($row=mysql_fetch_assoc($query))
    {
    $dbid=$row['id'];

    }
}

    $sql1 = "INSERT INTO poll_option(option , poll_id ,click)
       VALUES('$_POST[optionone]',
             '$dbid' , 0)";
    $result1 = mysql_query($sql1);
    echo "1 record added";
    echo mysql_error();

    $sql2 = "INSERT INTO poll_option(option , poll_id , click)
       VALUES('$_POST[optiontwo])',
             '$dbid', 0)";
    $result2 = mysql_query($sql2);
    echo mysql_error();

    $sql3 = "INSERT INTO poll_option(option , poll_id, click)
       VALUES('$_POST[optionthree])',
             '$dbid ', 0)";
    $result3 = mysql_query($sql3);

    echo mysql_error();  

现在我得到以下输出

 You have an error in your SQL syntax;
 check the manual that corresponds to your MySQL server version for the right syntax to use near 'option , poll_id ,click) VALUES('sj', '24' , 0)' at line 1
 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'option , poll_id , click) VALUES('dsdg', '24', 0)' at line 1
 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'option , poll_id, click) VALUES('xzf', '24 ', 0)' at line 1

“values”语法下的部分是我试图插入的部分。该信息是正确的。这是 VALUES('xzf','24',0)是正确的,我只想插入它,但它们是语法的一些问题。任何建议?

4 个答案:

答案 0 :(得分:0)

echo_me said

此外,在$sql2$sql3您过早关闭VALUES (...)括号:

VALUES('$_POST[optiontwo])',
                         ^ remove this

您的$sql1是正确的。

答案 1 :(得分:0)

OPTION是mysql的保留关键字

尝试在所有查询中使用反引号

像那样:

   `option`

查看保留关键字here

答案 2 :(得分:0)

除了删除错误添加到$ sql2和$ sql3的括号中所述的echo_me之外,你真的应该迁移到mysqli(因为不推荐使用mysql),并且至少在你的post变量之前使用真正的转义字符串选项将发布到脚本中的任何内容插入到数据库中。代码的一个很好的例子是:

$post_option1 = mysql_real_escape_string($_POST['optionone']);
$post_option2 = mysql_real_escape_string($_POST['optiontwo']);

$sql1 = "INSERT INTO poll_option (`option`, `poll_id`, `click`) VALUES('$post_option1', '$dbid', 0)";
$sql2 = "INSERT INTO poll_option (`option`, `poll_id`, `click`) VALUES('$post_option2', '$dbid', 0)";

我的意见是,它会使你的事情变得更简单。有关真实转义字符串的信息可以在这里找到:

http://php.net/manual/en/function.mysql-real-escape-string.php

在没有任何形式的SQL注入缓解的情况下,将POST或GET直接插入数据库是违反最佳做法的。

答案 3 :(得分:0)

尽量避免使用mysql函数,而是学习使用PDO函数。它们比mysql函数有许多优点,虽然我很抱歉,我现在不记得它们,我不想说任何不正确的事情。

另外,我不认为mysql函数可以阻止SQL注入,这可以让任何用户改变你想要的数据库。

最重要的是,他们是deprecated in PHP 5.5

对不起,如果我没有解决你的问题,只是想让你知道。祝你好运,也许你可以使用新的功能。

更新:抱歉,没有看到有关切换到mysqli等的评论和帖子。