目前我执行查询的方式是这样的:
$this->query(sprintf('插入 mytable 值 (%d, "%s")', $a, $this->esc($b)));
但我想实现自动转义,所以我想包装准备好的语句,这样我就可以做到这一点:
$this->query('插入 mytable 值 (?, ?)', $a, $b);
我的 query() 方法包装准备好的语句以执行单个查询是否有意义?
目前我执行查询的方式是这样的:
$this->query(sprintf('插入 mytable 值 (%d, "%s")', $a, $this->esc($b)));
但我想实现自动转义,所以我想包装准备好的语句,这样我就可以做到这一点:
$this->query('插入 mytable 值 (?, ?)', $a, $b);
我的 query() 方法包装准备好的语句以执行单个查询是否有意义?
拥有这样的功能实际上是唯一理智的方法。
虽然在应用程序代码中直接使用原始 API 函数,但在 Stack Overflow 这个受祝福的网站上宣传如此之多,是有史以来最糟糕的做法之一。
是的,即使对于单个查询执行也是有意义的。由于唯一准备好的语句的目的是正确无条件地格式化您的查询。
但是,使用本机准备好的语句为 mysqli 创建这样的函数是一项非常复杂的任务。一个人需要大量的经验和研究来完成它。
比如说,只为查询添加任意数量的参数,您将需要一屏代码:Bind multiple parameters into mysqli query
而且您需要两倍的时间才能将结果放入数组中!
但是,对于模拟的方法,它会容易得多,您可以考虑我对这样一个名为safeMysql的函数(实际上是一组函数)的尝试。但是,呃……我好像已经告诉过你了。