SQL插入错误似乎停止了中间的字符串

时间:2019-06-25 17:56:22

标签: php mysql

我有此代码可插入数据库。由于某种原因,它在第三个参数上中断。如果我将其删除,则其他2个工作也很好。

我也知道它应该是mysqli,即时通讯使用的是旧代码,只是试图使这一部分正常工作。稍后将解决地址更新。

echo $_SESSION['test']['categoryname'];
$result = mysql_query('INSERT INTO '.$db_table_prefix.'saved_tests (user, category, categoryname) VALUES ('. $user["id"] .','. $_SESSION["test"]["category"] .','. $_SESSION["test"]["categoryname"] .')', $db_connection); 

这在页面上输出:

气道呼吸和通气

无法插入data1064:您的SQL语法错误;在第1行的“呼吸和通风)”附近检查与MySQL服务器版本相对应的手册以使用正确的语法

我似乎无法弄清楚问题是什么。您会看到打印变量显示了完整的字符串。

3 个答案:

答案 0 :(得分:1)

在您的值中添加单引号以表示字符串。

  • 通常,日期和字符串值应该用单引号引起来,并且
  • 数字值不需要用引号引起来。

还可以通过使用一些中间变量使查询字符串更简单,从而使代码更简单,例如-

$db_table_prefix = 'tst';// table prefix goes here
$category = $_SESSION["test"]["category"];  //category goes here;
$categoryname = $_SESSION["test"]["categoryname"]; //category name goes here
$user_id = $user['id']; //700
$query = "INSERT INTO $db_table_prefix.saved_tests (user, category, categoryname) VALUES ('$user_id','$category','$categoryname')"; 
$result = mysql_query($query,$db_connection);

NB 还应考虑如何使用https://php.net/manual/en/function.mysql-real-escape-string.php之类的方法来防止SQL注入。

答案 1 :(得分:0)

您需要在包含字符串的值周围加上引号。

$result = mysql_query('INSERT INTO '.$db_table_prefix.'saved_tests (user, category, categoryname) 
    VALUES ('. $user["id"] .','. $_SESSION["test"]["category"] .',
            "'. mysql_real_escape_string($_SESSION["test"]["categoryname"]) .'")', $db_connection); 

如果$_SESSION["test"]["category"]也包含一个字符串,那么您也需要在其中加上引号。

您还应该使用mysql_real_escape_string()来防止SQL注入。

答案 2 :(得分:-1)

$_SESSION["test"]["category"]$_SESSION["test"]["categoryname"]是字符串。您需要使用报价。

mysql_query('INSERT INTO '.$db_table_prefix.'saved_tests (user, category, categoryname) VALUES ('. $user["id"] .',"'. $_SESSION["test"]["category"] .'","'. $_SESSION["test"]["categoryname"] .'")', $db_connection);

您没有避免SQL注入。而是使用参数化查询。请考虑使用PDO。 PDO将在12种不同的数据库系统上工作,而MySQLi仅在MySQL数据库上工作。