有人可以帮忙建议我插入语法可能有什么问题吗? 工作,除了我收到空查询消息
?:
答案 0 :(得分:4)
您的查询,
$sql="INSERT INTO newsletter-subscribers(first_name, last_name, email, postcode, gender, yob)VALUES('$first_name','$last_name','$email','$postcode','$gender','$yob')";
您的新查询,
$sql = "INSERT INTO `newsletter-subscribers` (first_name, last_name, email, postcode, gender, yob) VALUES ('$first_name','$last_name','$email','$postcode','$gender','$yob')";
那么,发生了什么变化?
如果没有桌面名称的反对,MySQL
会将其视为简报 减去 订阅者。这是错误的,添加刻度以告诉MySQL
它是表名。
修改1
这可能是副本&粘贴错误,我不确定,但是......
您的数据库连接也不正确,您没有为其分配任何值,因为您的报价未关闭且智能引号。
你的连接,
$db = mysql_connect ("localhost", “db_username, “db_password);
您的新连接
$db = mysql_connect("localhost", "db_username"," db_password");
此外,
$db_select = mysql_select_db(“db_name,$db);
To,
$db_select = mysql_select_db("db_name", $db);
注意报价的差异。
修改2
您的代码很容易SQL injection
,即使已弃用,您仍然使用MySQL
,您应该使用MySQLi
或PDO
准备好的语句。
更不用说您的$_POST
数据在未经过清理的情况下传递给查询,您应该开始使用htmlspecialchars
它会使其更好并阻止XSS
。
答案 1 :(得分:2)
您的表名包含破折号,因此您需要引用它。反引号或反引号字符用于引用MySQL中的符号名称(例如表,列等的名称),因此您需要这样的内容:
INSERT INTO `newsletter-subscribers` (first_name, ...