繁体   English   中英

命名MySQL表列

[英]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',''))'附近使用正确的语法

我现在在想,是因为:

  1. 我将表格列命名为“ q3-1”
  2. 还是其他问题?

如果改为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM