我正在尝试学习编写查询的最佳方法。我也了解保持一致的重要性。到现在为止,我在没有任何实际考虑的情况下随机使用单引号,双引号和反引号。
例:
$query = 'INSERT INTO table (id, col1, col2) VALUES (NULL, val1, val2)';
另外,在上述例子中,考虑到table
,col1
,val1
等可以是变量。
这是什么标准?你是做什么?
我已经在这里阅读了大约20分钟的类似问题的答案,但是似乎没有确切的答案。
反引号用于表和列标识符,但是仅当标识符是MySQL保留关键字时,或者当标识符包含空格字符或超出限制集的字符时才需要使用反引号(请参见下文)。通常建议避免使用保留关键字在可能的情况下用作列或表的标识符,从而避免引用问题。
单引号应用于VALUES()
列表中的字符串值。MySQL还为字符串值支持双引号,但是单引号已被其他RDBMS广泛接受,因此使用单引号而不是双引号是一个好习惯。
MySQL还希望DATE
和DATETIME
文字值可以像字符串一样单引号'2001-01-01 00:00:00'
。有关更多详细信息,请查阅日期和时间文字文档,尤其是-
在日期字符串中使用连字符作为分段定界符的替代方法。
因此,使用您的示例,我将对PHP字符串加双引号,并在values上使用单引号'val1', 'val2'
。
NULL
是MySQL关键字,是一个特殊的(非)值,因此未加引号。
这些表或列标识符都不是保留字,也不使用需要引号的字符,但是无论如何我都用反引号将它们引号(稍后再说……)。
RDBMS的本机函数(例如,NOW()
在MySQL中)不应被引用,尽管它们的参数要遵循已经提到的相同的字符串或标识符引用规则。
反引号(`)
表格和列────────┬──────┬──┬──┬──┬────┬──┬────┬──┬──┬────┬──┬ ────────┐
↓↓↓↓↓↓↓↓↓↓↓↓
$ query =“ **插入表中(id,col1,col2,date,updated)
值(NULL,'val1','val2','2001-01-01',NOW())** “;
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
未引用的关键字──────┴┴┴┘││││││││││││
单引号(')字符串────────────┴────┴──┴──────││││││││
单引号(')日期────────────┘││││ │
未引用的函数──────────────────┴┴┴┴┘
变量的引用模式不会改变,尽管如果您打算直接在字符串中插入变量,则必须在PHP中将其双引号。只要确保您已正确转义了要在SQL中使用的变量即可。(建议使用支持预处理语句的API来防止SQL注入)。
//同一件事,但有一些变量替换
//这里,变量表名$ table用反引号引起来,并且变量
// VALUES列表中的单引号
$ query =“将 **INERT** 插入 **`$ table`** (`id`,`col1`,`col2`,`date`)值(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文档,您不需要使用以下字符集引用(反引号)标识符:
ASCII :(
[0-9,a-z,A-Z$_]
基本拉丁字母,数字0-9,美元,下划线)
您可以使用超出设置范围的字符作为表或列标识符,例如,包括空格,但是 必须将其 引号(反引号)。
问题内容: 我有一个正在编写的脚本,用于将某些字段移至新的数据库,例如 但是如您所见,由于单引号和双引号,查询每次都会中断,是否有解决此问题的方法,例如herdok或类似的东西 问题答案: 为此而制作的。 PHP:mysql_real_escape_string
问题内容: 这实际上有什么区别? 这工作正常: 但以下操作无效: 这是为什么? 问题答案: 那是因为双引号被认为是标准的,而单引号却没有。这并不是真正针对JQuery,而是关于JSON标准。因此,无论使用JS工具包,您都应该期待相同的行为。 值可以是带双引号的字符串,也可以是数字,也可以是true或false或null,或者是对象或数组。这些结构可以嵌套。
问题内容: 这是需要执行的代码块: 此块用Java代码形成。在执行时,这将引发异常 org.springframework.jdbc.BadSqlGrammarException 。但是当我更改为它时,执行成功。 这是我的问题: 1)为什么在我使用单引号时会引发异常? 2)单引号和双引号“单引号”有什么区别? 3)如果我始终使用双“单引号”,会不会有任何后果? 问题答案: 从Oracle文档中获取
问题内容: 我有反引号构建MYSQL查询。例如, 相对于: 我认为我是从Phpmyadmin导出中获得这种做法的,并且据我了解,甚至Rails都会生成这样的查询。 但是如今,我看到这样构建的查询越来越少了,而且代码看起来更加混乱,并且查询中带有反引号。即使有了SQL helper函数,没有它们,事情也会变得更加简单。因此,我正在考虑将它们抛在后面。 我想找出这种做法是否还有其他含义,例如SQL(在
我正在使用opencsv读取csv文件。有时csv文件中包含单引号或双引号。如何读取它们而不更改csv文件本身中的数据。 现在,如果我用两个单引号替换一个单引号,它工作正常,与双引号相同,用两个替换单个引号,它的工作原理。但我不想碰源文件。 要访问的代码如下: 这样做的结果是跳过下一行(也包含双引号),插入所有奇数行,跳过偶数行 提前谢谢
问题内容: 如何在Python中转义反斜杠和单引号或双引号? 例如: 问题答案: 你是怎么做到的 如果您从文件中读取了“长字符串”(如您在注释中所述),那么您的问题将引起误解。由于您显然不完全了解转义的工作原理,因此您写下的问题可能与您真正遇到的问题不同。 如果这些是文件的内容(如图所示为51个字节+可能是一两个行尾字符): 那么这就是在python中的样子: 您在问题中写的内容将产生: 你看得到