此SQL查询中的语法错误是什么?

时间:2013-02-26 15:25:43

标签: php mysql sql

我试图解决这个错误很长一段时间,也许我是盲目但我没有看到什么是错的。

$query = "INSERT INTO `130225` (`vote`,`ip`) VALUES (".$_POST['130225'].",".$_SERVER['REMOTE_ADDR'].");";

3 个答案:

答案 0 :(得分:6)

IP未附加单引号(,如果它是字符串),

$query = "INSERT INTO `130225` (`vote`,`ip`) VALUES (".$_POST['130225'].",'".$_SERVER['REMOTE_ADDR']."');";
//                                                                        ^                           ^

作为旁注,如果变量的值( s )来自外部,则查询易受SQL Injection攻击。请查看下面的文章,了解如何防止它。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

答案 1 :(得分:1)

看起来你错过了一些你的价值所在的“'”。

$query = "INSERT INTO `130225` (`vote`,`ip`) VALUES ('".$_POST['130225']."','".$_SERVER['REMOTE_ADDR']."');";

如果将查询粘贴到数据库中,则更容易对查询进行疑难解答。将会有一个有用的(有时不是......)错误消息。

我从您的查询中得到的错误是

#1054 - Unknown column 'text here' in 'field list'

谷歌此错误,将有关于如何解决它的提示。

答案 2 :(得分:0)

最好使用预准备语句来避免类似问题。像这样,你不需要担心报价。

$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world');

查询必须如下所示:

$ stmt = $ mysqli-> prepare(“INSERT INTO 130225(vote,ip)VALUES(?,?));

然后绑定参数:

$ stmt-> bind_param('ss',$ _POST ['130225'],$ _ SERVER ['REMOTE_ADDR']);

等...