Php 无效查询:SQL语法中有错误

Php 无效查询:SQL语法中有错误,php,mysql,Php,Mysql,这是我在服务器中的php代码,其中有一个名为'questions'的表,我试图从前端使用表单的GET方法获得的输入中插入数据,我可以确定数据正确地来自我使用echo检查的客户机。我得到一个错误,因为 您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行“名称,在此处键入您的问题,公司)”附近使用的正确语法 不知道查询中的错误是什么。任何人都要尽快找到它。谢谢您需要引用您的价值观 <?php mysql_connect("mysql6.000webhost.com","a

这是我在服务器中的php代码,其中有一个名为'questions'的表,我试图从前端使用表单的GET方法获得的输入中插入数据,我可以确定数据正确地来自我使用echo检查的客户机。我得到一个错误,因为

您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行“名称,在此处键入您的问题,公司)”附近使用的正确语法


不知道查询中的错误是什么。任何人都要尽快找到它。谢谢

您需要引用您的价值观

<?php
mysql_connect("mysql6.000webhost.com","a6124751_murali1","***");
$db= mysql_select_db("a6124751_signup");
$topic=$_GET["Topic"];
$question=$_GET["Question"];
$company =$_GET["Company"];
$query = "INSERT INTO questions (topic, question, company) VALUES ($topic, $question, $company)";
$sql1=mysql_query($query);
if (!$sql1) {
 die('Invalid query: ' . mysql_error());
}
?>
因为那是字符串

另外,您应该出于以下几个原因来逃避数据。不要让MySQL抱怨某些字符,如连字符等,并防止SQL注入

使用事先准备好的陈述:

参考资料:


编辑:

例如,使用您当前的MySQL API:

('$topic', '$question', '$company')
我不知道你的输入叫什么,所以这只是一个例子

您提到使用
$\u GET
进行调试,但使用POST方法

  • 将上面的所有
    $\u GET
    更改为
    $\u POST

您需要引用您的价值观

<?php
mysql_connect("mysql6.000webhost.com","a6124751_murali1","***");
$db= mysql_select_db("a6124751_signup");
$topic=$_GET["Topic"];
$question=$_GET["Question"];
$company =$_GET["Company"];
$query = "INSERT INTO questions (topic, question, company) VALUES ($topic, $question, $company)";
$sql1=mysql_query($query);
if (!$sql1) {
 die('Invalid query: ' . mysql_error());
}
?>
因为那是字符串

另外,您应该出于以下几个原因来逃避数据。不要让MySQL抱怨某些字符,如连字符等,并防止SQL注入

使用事先准备好的陈述:

参考资料:


编辑:

例如,使用您当前的MySQL API:

('$topic', '$question', '$company')
我不知道你的输入叫什么,所以这只是一个例子

您提到使用
$\u GET
进行调试,但使用POST方法

  • 将上面的所有
    $\u GET
    更改为
    $\u POST

如果是字符类型,则必须将值放在单个qoutes中:

$topic    = mysql_real_escape_string($_GET['topic']);
$question = mysql_real_escape_string($_GET['question']);
$company  = mysql_real_escape_string($_GET['company']);

但是您不应该再使用不推荐的
mysql.*
API。在准备好的语句中使用
mysqli.*
或PDO。

如果是字符类型,则必须将值放在单个QOUTE中:

$topic    = mysql_real_escape_string($_GET['topic']);
$question = mysql_real_escape_string($_GET['question']);
$company  = mysql_real_escape_string($_GET['company']);
但是您不应该再使用不推荐的
mysql.*
API。在准备好的语句中使用mysqli*或PDO。

试试这个

$query = "INSERT INTO questions (topic, question, company) VALUES ('$topic', '$question', '$company')";
试试这个

$query = "INSERT INTO questions (topic, question, company) VALUES ('$topic', '$question', '$company')";

从请求变量运行未初始化的查询是个坏主意!感谢您编辑DaveBad先生的想法,从请求变量运行未初始化的查询!如果您需要编辑Daveyes先生,我应该隐藏数据,但为了调试,我使用GET方法。如果我使用post,是否有其他方法让我知道数据的去向method@MuraliKrish如果您使用的是POST方法,请将所有
$\u GET
更改为
$\u POST
@DaveChen谢谢您的输入。编辑:您删除了您的评论。谢谢,我理解了,您的意思是关于sql注入。@MuraliKrish另一种方法是
$\u REQUEST
,它同时处理GET和POST,但最好使用与您正在使用的表单方法相同的方法。编辑:不客气。是的,我应该隐藏数据,但为了调试,我使用GET方法。如果我使用post,是否有其他方法让我知道数据的去向method@MuraliKrish如果您使用的是POST方法,请将所有
$\u GET
更改为
$\u POST
@DaveChen谢谢您的输入。编辑:您删除了您的评论。谢谢,我理解了,您的意思是关于sql注入。@MuraliKrish另一种方法是
$\u REQUEST
,它同时处理GET和POST,但最好使用与您正在使用的表单方法相同的方法。编辑:不客气。