Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用wpdb->query()函数好吗?

使用wpdb->query()函数好吗?
EN

WordPress Development用户
提问于 2020-12-09 05:02:41
回答 2查看 682关注 0票数 1

我正在使用自定义php代码来执行数据插入、删除、更新和其他任务。我可以用两种不同的方式将数据插入到一个表中,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$wpdb->insert($table_name, array('id' => NULL, 'name' => '$name', 'email' => '$email', 'city' => '$city'));

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$sql = "INSERT INTO $table_name VALUES('', '$name', '$email', '$city')";
$wpdb->query($sql);

通过将我的查询传递给函数,而不是使用专用的函数(如insert()delete()等),每次使用D3函数是一种好做法吗?如果没有,这种方法的缺点是什么?

EN

回答 2

WordPress Development用户

回答已采纳

发布于 2020-12-09 06:03:18

如果您稍微查看一下源代码,您将看到$wpdb->insert()将使用->query()在引擎盖下面。所以应该是一样的对吧?

没那么简单。它不仅使用->query(),而且使用->prepare(),这被认为是最佳实践。同时,使用您的代码示例,您可能已经打开了SQL注入的大门。

这里的教训:如果是一个简单的操作和->insert()等方法工作-使用他们。它们经过测试,风险很小。编写自己的查询总是有可能让自己陷入诸如SQL注入之类的麻烦。

票数 7
EN

WordPress Development用户

发布于 2020-12-09 06:02:09

如果每次使用wpdb-> query ()函数,将我的查询传递给函数,而不是使用insert()和delete()等专用函数,这是一种好做法吗?

No,这不是很好的实践。总是喜欢insert/update/etc方法。

通常,在WordPress中使用原始SQL是一种代码嗅探,当助手函数可用时使用原始SQL也是不好的做法。这意味着作者不知道更方便的API具有更好的速度/安全性,并迫使您重新发明多年来开发人员所遇到的所有修复和bug。

所以:

  • 使用insert等插入,而不是query,总是更喜欢更具体的函数
  • 使用第三个参数,该参数指定安全原因的格式。
  • 在特定函数不可用的情况下,使用query作为更一般SQL查询的后盾,

  • 不要在'中包装变量,使用$name而不是'$name',否则会插入$name而不是它的值。
  • 不需要将id设置为null,如果表是用自动增量创建的,则可以删除
  • 你应该检查它是否成功,不要仅仅假设它成功了
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$result = $wpdb->insert(
    $table_name,
    [
        'name'  => $name,
        'email' => $email,
        'city'  => $city,
    ],
    [
        '%s',
        '%s',
        '%s',
    ]
);
if ( false === $result ) {
    // something went wrong
}

如何创建表?

使用 dbDelta ** ,**如果表不存在,它将创建表,并在更改时更新它们的模式。没有查询来测试表是否存在,或者更新它,或者创建它,dbDelta为您做它。它将表创建查询作为参数,必须以一种特定的方式进行格式化,否则将无法工作。

wpdb->query不适合创建表。

--关于自定义表

的注记

仅仅因为您使用了自定义表,并不意味着它更快/更好。确保使用反映将要运行的查询类型的键和索引来设计表。一个良好的表可以闪电般的快速,但大多数表将表现更差的定制职位类型的规模,因为糟糕的设计。

在可能的情况下,尽量避免编写SQL来与表进行交互。

票数 5
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/379560

复制
相关文章
C++ - “当前不会命中断点 还没有为该文档加载任何符号”解决方法
调试时总是出现“当前不会命中断点 还没有为该文档加载任何符号”这样的错误。出现这种情况的时候,可以按以下几种方式解决:
AIHGF
2019/02/18
8.7K0
\[vscode issue\] Golang Debug 无法命中断点
Kevinello
2023/10/18
5891
\[vscode issue\] Golang Debug 无法命中断点
VisualStudio 2019 调试项目使用 Portable PDB 提示不支持 PDB 格式
在新的 .NET 上,将会默认使用 Portable PDB 符号格式,而如果 VisualStudio 配置了使用托管兼容模式,那么将在加载符号的时候,将会提示不支持 PDB 格式
林德熙
2022/08/12
7800
Visual Studio 调试系列3 断点
断点是开发人员的工具箱中最重要的调试技术之一。 若要暂停调试程序执行所需的位置设置断点。 例如,你可能想要查看代码变量的状态或查看调用堆栈的某些断点。
张传宁IT讲堂
2019/09/17
5.4K0
Visual Studio 调试系列3 断点
解决VS2015无法调试问题
https://www.cnblogs.com/studyskill/p/7675402.html
用户7787521
2020/09/25
2.1K0
VS2013+python+boost.
    解压boost.python后,用VS的[本机命令提示工具](开始-VS2013-VS Tools)进入到boost的文件夹,运行bootstrap.bat生成bjam.exe。然后运行:
py3study
2020/01/03
7890
vs2013配置python
根据自己需求下载对应的版本:我下载的至最新的,直接点击黄色按钮下载,下载后文件:(python32位的)
py3study
2020/01/07
7920
VS 2013 打包程序教程
如果你只是想要在他人的机子上运行你的程序而不想安装,有一种简单的方法,只要使用本教程的“步骤—3.生成Release 文件夹”即可。但是有一点需要注意,如果你在程序中调用了其他的dll,那么你需要将这个dll 放置到Release文件夹。之后你只要将Release 文件夹拷贝到其他的机子上运行即可。
用户3148308
2019/02/25
1.2K0
VS 2013 打包程序教程
java文档注释符号_java的注释符号
标识符可以简单的理解成一个名字。 在Java中,我们需要给代码中的很多元素起名,包括类名、方法名、字段名、变量名等等。我们给对应元素起的名称就被称为标识符,一个正确的标识符需要遵循以下规则:
全栈程序员站长
2022/11/10
10.3K0
java文档注释符号_java的注释符号
卸载vs2013_如何卸载vs2015
最近編譯代碼時由於出現頭文件不匹配,需要升級VS2005,升級比較麻煩,乾脆直接過渡到VS2008得了. 先把.NET Framework從1.0一直刪除到3.0,再刪除一些相關依賴包時,安裝程式出錯.找了一下資料,正確的安裝過程如下:
全栈程序员站长
2022/11/09
6030
VS 2013安装教程「建议收藏」
大家好,又见面了,我是你们的朋友全栈君。 1.下载资源 此版本是旗舰版,其他版本自行下载 http://download.microsoft.com/download/9/3/E/93EA27FF
全栈程序员站长
2022/09/30
1.4K0
VS 2013安装教程「建议收藏」
vs2013下载及安装教程_VS2013下载
http://download.microsoft.com/download/0/7/5/0755898A-ED1B-4E11-BC04-6B9B7D82B1E4/VS2013_RTM_ULT_CHS.iso
全栈程序员站长
2022/10/03
5.2K0
vs2013下载及安装教程_VS2013下载
简单聊聊VisualStudio的断点调试
在debug过程中,我们有时需要查看程序在运行到某一行代码时,上下文中的变量或者一些其他的数据是什么样的,我们就要设置断点(Breakpoint)。断点顾名思义,就是运行到打断点的这一行,程序就中断,暂停。下面就看看如何使用VisualStudio来断点调试C#代码。
zls365
2021/04/23
1.1K0
简单聊聊VisualStudio的断点调试
vs2013注册_vs2008是什么软件
VS2008 注册方法:   VS2008注册方法非常简单,在开始>设置>控制面版>添加或删除程序>卸载vs.net2008(名字不太记得了)>出现卸载界面>点击Next>输入上面CD-key ->出现成功画面即可完美将试用版升级成为正式版。
全栈程序员站长
2022/09/23
7020
VS2013中Python学习笔记[基础入门]
        在上一节中简单的介绍了在VS2013中如何进行开发Hello World,在VS2013中进行搭建了环境。本节主要来简单的学习一下关于Python的基础。
aehyok
2018/08/31
5240
VS2013中Python学习笔记[基础入门]
迁移TFS,批量将文档导入SharePoint 2013 文档库
一、需求分析 公司需要将存在于旧系统(TFS)所有的文档迁移至新系统(SharePoint 2013)。现已经将50G以上的文档拷贝到SharePoint 2013 Server上。这些文档是一些
用户1161731
2018/01/11
1.5K0
迁移TFS,批量将文档导入SharePoint 2013 文档库
VS2013中Python学习笔记[环境搭建]
Python的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。
aehyok
2019/02/25
5970
C# 客户端程序 Visual Studio 远程调试方法
可以通过将msvsmon.exe复制到远程计算机,也可以通过安装远程工具来运行远程调试器(安装远程工具完成以后就和复制粘贴文件打开msvsmon.exe是一样的,多一个配置页面,这里主要演示复制粘贴):
郑子铭
2023/08/30
5560
C# 客户端程序 Visual Studio 远程调试方法
C# 客户端程序Visual Studio远程调试方法
传统桌面客户端的远程调试相比UWP,ASP等项目来说,配置比较麻烦,因为它是非部署的应用程序,原理是复制编译的文件到远程计算机,通过网络来连接和VS的通信,本文主要讲述WPF,WinForm应用程序的远程调试。
郑子铭
2023/08/30
5900
C# 客户端程序Visual Studio远程调试方法
IDA Pro Plugin wizard for vs2013
 感谢zadow提供的升级版的向导: https://forum.tuts4you.com/topic/34511-ida-pro-plugin-wizard-for-vs2013/
obaby
2023/02/23
4470

相似问题

当前不会命中断点。尚未为此文档加载任何符号

20

当前不会命中断点:尚未为此文档加载任何符号

170

当前不会命中断点。尚未为此文档加载任何符号。

50

问题:当前不会命中断点。尚未为此文档加载任何符号

12

无法调试-“当前不会命中断点。尚未为此文档加载任何符号”

60
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文