[英]Naming MySQL table column
我在这里遇到一个小问题:
我正在通过PHP输入一个MySQL查询。 我检查了连接是否正常,看起来如下所示:
INSERT INTO table (q1,q2,q3) VALUES ('".$_POST['Q1']."', '".$_POST['Q2']."'...)
然后当我将查询更改为以下内容时,出现错误:
INSERT INTO table (q1,q2,q3-1) VALUES ('".$_POST['Q1']."', '".$_POST['Q2']."'...)
出现以下错误:
您的SQL语法有误; 检查与您的MySQL服务器版本相对应的手册,以在第1行的'-1)VALUES('N','asdfasdf',''))'附近使用正确的语法
我现在在想,是因为:
如果改为q3_1可以吗?
如果您在字段名称周围加上反引号`,应该没问题
即:
INSERT INTO table (`q1`,`q2`,`q3-1`) ...
使用反引号。 研究PDO 。
INSERT INTO table (q1,q2,`q3-1`)
VALUES ('".$_POST['Q1']."', '".$_POST['Q2']."'...)
由于q3-1
,您在第二个查询中有错误。 应该用引号引起来:
INSERT INTO table (q1,q2,`q3-1`) VALUES ('".$_POST['Q1']."', '".$_POST['Q2']."'...)
使用反引号( ` )转义列名
INSERT INTO table (`q1`, `q2`, `q3-1`)
VALUES ('".$_POST['Q1']."', '".$_POST['Q2']."'...)
但是该语句容易受到SQL Injection
攻击。 尝试将其与PDO一起使用
例如)
<?php
$stmt = $dbh->prepare("INSERT INTO table (`q1`, `q2`, `q3-1`) VALUES (?, ?, ?)");
$stmt->bindParam(1, $_POST['Q1']);
$stmt->bindParam(2, $_POST['Q2']);
$stmt->bindParam(3, $_POST['Q3']);
$stmt->execute();
?>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.