0

我正在尝试使用通过 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('xzf', '24', 0) 是正确的,我只想插入这个,但它们的语法有问题。有什么建议吗?

4

4 回答 4

0

尽量避免使用mysql函数,而是学习使用PDO函数。与 mysql 函数相比,它们有许多优点,虽然我真的很抱歉,我现在不记得它们了,我不想说任何不真实的东西。

另外,我不认为 mysql 函数可以防止 SQL 注入,这可以让任何用户随意更改您的数据库。

但最重要的是,它们在 PHP 5.5 中已被弃用

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

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

于 2013-04-29T03:22:01.603 回答
0

echo_me 说了什么。

此外,在$sql2并且$sql3VALUES (...)过早关闭括号:

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

$sql1是正确的。

于 2013-04-28T20:55:13.220 回答
0

OPTION是mysql的保留关键字

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

像那样:

   `option`

在此处查看保留关键字

于 2013-04-28T20:55:58.457 回答
0

除了 echo_me 在删除错误添加到 $sql2 和 $sql3 的括号中所说的之外,您确实应该迁移到 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 插入数据库是违反最佳实践的。

于 2013-04-29T00:28:37.950 回答