我有此代码可插入数据库。由于某种原因,它在第三个参数上中断。如果我将其删除,则其他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服务器版本相对应的手册以使用正确的语法
我似乎无法弄清楚问题是什么。您会看到打印变量显示了完整的字符串。
答案 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数据库上工作。