mysql中何时需要引号,何时在MySQL中使用单引号,双引号和反勾号

匿名用户

背勾用于表和列标识符,但只有当标识符是MySQL保留关键字,或者标识符包含空格字符或超出有限集合的字符(见下文)时才有必要。通常建议尽可能避免使用保留关键字作为列或表标识符,以避免引用问题。

单引号应用于字符串值,如values()列表中的字符串值。 MySQL对字符串值也支持双引号,但是单引号被其他RDBMS更广泛地接受,因此使用单引号而不是Double是一个好习惯。

MySQL还要求date和datetime文本值作为字符串使用单引号,如'2001-01-01 00:00:00'。 有关详细信息,请参阅日期和时间文字文档,特别是在日期字符串中使用连字符-作为段分隔符的替代方法。

因此,在您的示例中,我将双引号引用PHP字符串,并在,'val1','val2'值上使用单引号。 null是一个MySQL关键字,是一个特殊的(非)值,因此不加引号。

这些表或列标识符没有一个是保留字,也没有使用需要引用的字符,但我还是用后勾号引用了它们(稍后将详细介绍。。。)。

RDBMS本机函数(例如,MySQL中的now())不应被引用,尽管它们的参数受前面提到的字符串或标识符引用规则的约束。Backtick (`)

table & column ───────┬─────┬──┬──┬──┬────┬──┬────┬──┬────┬──┬───────┐

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓

$query = "INSERT INTO `table` (`id`, `col1`, `col2`, `date`, `updated`)

VALUES (NULL, 'val1', 'val2', '2001-01-01', NOW())";

↑↑↑↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑↑↑↑↑

Unquoted keyword ─────┴┴┴┘ │ │ │ │ │ │ │││││

Single-quoted (') strings ───────────┴────┴──┴────┘ │ │ │││││

Single-quoted (') DATE ───────────────────────────┴──────────┘ │││││

Unquoted function ─────────────────────────────────────────┴┴┴┴┘

变量的引用模式没有改变,尽管如果您打算在字符串中直接插值变量,在PHP中必须双引号。 只需确保您已正确转义了SQL中使用的变量。 (建议使用支持预置语句的API,以防止SQL注入)。// Same thing with some variable replacements

// Here, a variable table name $table is backtick-quoted, and variables

// in the VALUES list are single-quoted

$query = "INSERT INTO `$table` (`id`, `col1`, `col2`, `date`) VALUES (NULL, '$val1', '$val2', '$date')";

使用准备好的语句时,请参考文档以确定是否必须引用语句的占位符。 PHP,PDO和MySQLi中最流行的API都包含未加引号的占位符,其他语言中的大多数准备好的语句API也是如此:// PDO example with named parameters, unquoted

$query = "INSERT INTO `table` (`id`, `col1`, `col2`, `date`) VALUES (:id, :col1, :col2, :date)";

// MySQLi example with ? parameters, unquoted

$query = "INSERT INTO `table` (`id`, `col1`, `col2`, `date`) VALUES (?, ?, ?, ?)";

根据MySQL文档,您不需要使用以下字符集对标识符进行引号(backtick):

ASCII:[0-9,a-z,a-z$_](基本拉丁字母,数字0-9,美元,下划线)

您可以使用超出该集合的字符作为表或列标识符,例如,包括空格,但必须对它们进行引号(反勾号)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值