无效查询:您的SQL语法有错误


Invalid query: You have an error in your SQL syntax

<?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());
}
?>

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

你的SQL语法有错误;查看与MySQL服务器版本对应的手册,以便在第1行"name,在这里输入您的问题,company)"附近使用正确的语法

不知道查询中的错误是什么。有人能尽快发现吗?谢谢你

你需要引用你的值

('$topic', '$question', '$company')

因为它们是字符串。

另外,出于几个原因,您应该转义您的数据。不让MySQL抱怨某些字符如连字符等,并防止SQL注入。

使用预处理语句:

  • https://en.wikipedia.org/wiki/Prepared_statement

参考(s):

  • https://en.wikipedia.org/wiki/SQL_injection
  • 如何在PHP中防止SQL注入?
  • http://php.net/manual/en/function.mysql-real-escape-string.php

编辑:

作为使用当前MySQL API的示例:

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

我不知道你输入的是什么,所以这只是一个例子。

您提到使用$_GET进行调试,但使用POST方法。

  • 将以上$_GET全部改为$_POST

试试这个

<?php
$db = mysqli_connect('mysql6.000webhost.com', 'a6124751_murali1', 'default@123', 'a6124751_signup');
if (!$db) {
    die('Connect Error (' . mysqli_connect_errno() . ') '
            . mysqli_connect_error());
}
$topic = $_GET["Topic"];
$question = $_GET["Question"];
$company = $_GET["Company"];
$query = "INSERT INTO questions (topic, question, company) VALUES ('$topic', '$question', '$company')";
$sql1=mysqli_query($db, $query);
if(!$sql1)
{
    die('Invalid query: ' . mysqli_error($db));
}
?>

修复你的代码

  • mysql扩展名已弃用,将来会被删除:使用mysql或PDO代替

  • 您需要引用您的值('$topic', '$question', '$company')

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

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

但是您不应该再使用已弃用的mysql_* API。在预处理语句中使用mysqli_*或PDO