使用wpdb是否是一种良好的做法->;每次都通过将查询传递给函数而不是使用专用函数(如insert()和delete()等)来执行query()函数?
No, it is not good practice. 总是喜欢insert
/update
/etc方法。
通常,在WordPress中使用原始SQL是一种代码味道,而在助手函数可用时使用原始SQL也是一种不好的做法。这意味着作者不知道更方便的API具有更好的速度/安全性,并迫使您重新设计WP开发人员多年来遇到的所有修复和bug。
因此:
使用insert
etc插入,而不是query
, 始终希望使用更具体的功能出于安全原因,使用指定格式的第三个参数query
在特定函数不可用的情况下,作为更一般的SQL查询的后备方法,请始终使用prepare
对于原始SQL,您问题中的示例存在SQL注入攻击漏洞。See here for how to prepare and secure a raw query. insert
如果您传递第三个参数,etc将自动执行此操作\'
, 使用$name
不\'$name\'
或者您将插入$name
不是它的价值你不需要id
设置为null
, 如果表格是用自动增量正确创建的,您可以删除它,您应该检查它是否成功,不要只是假设它工作了
$result = $wpdb->insert(
$table_name,
[
\'name\' => $name,
\'email\' => $email,
\'city\' => $city,
],
[
\'%s\',
\'%s\',
\'%s\',
]
);
if ( false === $result ) {
// something went wrong
}
创建表怎么样
Use dbDelta
, 如果表不存在,它将创建表;如果模式发生更改,它将更新模式。没有要测试表是否存在、更新或创建的查询,
dbDelta
为你做这件事。它将表创建查询作为参数,必须以特定的方式格式化,否则将无法工作。
wpdb->query
不适合创建表。
仅因为使用了自定义表,就需要对自定义表进行注释,这并不意味着它更快/更好。确保使用反映要运行的查询类型的键和索引设计表。一个构建良好的表可能会有闪电般的速度,但由于糟糕的设计,大多数表在规模上的性能会比自定义的post类型差。
如果可能的话,避免编写SQL与表交互。