php - 使用没有引用的 PHP MySQLi 准备语句?
问题描述
有没有办法在不传递引用的情况下使用 MySQLi 准备好的语句?
[背景:我对 PHP 和 MySQL 非常陌生,但我继承了一个私有的 WordPress 插件来维护,所以我边走边学。]
我知道准备好的语句对于防止 SQL 注入很有用,并且可能还可以加快查询速度(如果保留语句),但是对引用变量的需求似乎很奇怪。bind_param
一个人在前面调用然后在进行后续查询时只是将数据设置到那些绑定变量中而不是与语句交互的想法是这样的吗?
现在我正在重构的代码有 17 个变量,它传递给bind_param
. 我创建了一个包含所有数据的类,因此我不再需要在函数之间传递 17 个变量,但下面显然失败了,因为我的类没有返回引用:
$stmt->bind_param('ssssssisssssssssi',
$my_class->get(FIELD_ONE),
$my_class->get(FIELD_TWO),
/*...x15 more...*/)
鉴于代码当前$stmt
在之后立即丢弃$stmt->execute()
(因此没有要跟踪的长期变量),有没有办法让我使用准备好的语句而无需创建临时变量,以便我可以绑定它们?是否有我可以或应该使用的替代类/接口?
谢谢!
解决方案
就在这里。
前段时间,PHP 中添加了一个非常宝贵的特性——一个参数解包操作符。它有十亿个用途,在这种情况下帮助你就是其中之一。
只需...[
在您的值列表之前和]
之后添加 - 瞧,它有效!
$stmt->bind_param('ssssssisssssssssi', ...[
$my_class->get(FIELD_ONE),
$my_class->get(FIELD_TWO),
/*...x15 more...*/
]);
提示:这个有用的运算符也可以用来将无聊的准备/绑定/执行过程封装在一个简单的函数中。
推荐阅读
- javascript - 转换旋转的 Firefox 抽搐问题
- angular - Angular 6 Reactive Form添加错误类容器Div
- c# - trigger style 改变一个元素的所有样式
- c# - SQL查询使用C#返回太多相同的列数据
- html - Boostrap 背景在 CSS 中不起作用,位置:固定也不起作用
- mysql - 两个单独的查询瞬时。用子查询查询很慢。为什么?mysql/mariadb
- laravel - Laravel 从关系中只得到一列
- php - 如何使用 GitLab API 获取合并分支的列表?
- javascript - 切换选项卡时未触发 setOnNavigatorEvent 回调
- memory - Discord 如何从游戏中读取内存?