php 5.2.17
mysqliprepared statements 结果绑定到变量。
想要扩展 mysqli_stmt 以添加自定义 fetchAll 方法。
为什么?因为想停止为准备好的语句数据库结果编写相同的 while 语句,并将代码包含在 mysqli 本身中,以便自动处理所有调用。我还添加了我自己的特殊代码和过滤器。
我已经能够扩展 mysqli 类并添加自定义处理来为非准备好的语句执行此操作,但希望将其添加到准备好的语句处理中。
阅读stackoverflow和其他地方,我发现了一些扩展mysqli_stmt的例子,但没有类似于为php 5.2x添加一个fetchAll类型的自定义方法。
我不明白这是如何工作的,我对 OOP 和扩展核心 php 类有点陌生,并且希望尽可能多地解释,以便我可以学习。
我的虚拟主机有 php 5.2.17,我无法控制它,所以升级 php 不是一种选择。我创建了一个处理 PDO、mysqli 和 mysql 数据库连接的类。我现在正在尝试优化这一点,并尽可能地封装和移动到相关领域,因此我有兴趣这样做。
我了解结果类,但据我所知,获取准备好的语句的处理是通过 mysqli_stmt 类完成的,该类只有 fetch 来检索结果。我无法从这门课内得到结果,只能在外面得到。我假设由于绑定或参数和变量。我不完全了解这里的过程。
我得到的结果也绑定到变量,这些是通过 while 循环更新的。我想采用这个过程并将其放在 stmt 类中,但我不明白如何做到这一点。
感谢您提供任何帮助。我很聪明,但我很难理解这个过程,所以如果你能很好地解释它,那就太好了。
谢谢。
编辑:
我想添加到此以显示一些代码。
$mysqli->execute();
$mysqli->store_result();
$mysqli->bind_result($id, $name, $age);
$i = 0;
While($mysqli->fetch()){
$array[$i]['id'] = $id;
$array[$i]['age'] = $age;
$array[$i]['name'] = $name;
$i++;
}
return $array;
查看 While 语句。
现在假设我想将它放入 MYSQLI_STMT 类中,这样我就不必一遍又一遍地编写它,只需让 MYSQL_STMT 类处理它。
这将进入一个名为 FetchALL 的新方法。问题是,它不起作用。由于这个准备好的语句,当它们到达这一点时,语句和 SQL 还没有准备好。
我不了解这个过程来做这样的事情,而且我对我认为会发生什么的猜测已经结束了。
以下是我编辑的代码,不是我原创的。我忘记了我从哪里得到它以及作者是谁,但我不相信下面的代码。我确实从原始版本中更改了一些内容,并删除了与我的问题/问题无关的所有内容。
class my_mysqli_stmt extends mysqli_stmt{
public function __construct($link, $query) {
parent::__construct($link, $query);
}
public function fetchAll(){
echo "FetchAll Method";
while($this->fetch()){
# Nothing happens here
# and don't know what
# to insert here if it did
}
}
}
class my_Mysqli extends mysqli {
public function prepare($query) {
return new my_Mysqli_stmt($this, $query);
}
}
上面带有 WHILE 语句的代码块将被替换为:
$mysqli->execute();
$mysqli->store_result();
$mysqli->bind_result($id, $name, $age);
$mysqli->fetchAll(); <-- This would replace the WHILE loop.
当然,这是行不通的。也许它不打算以这种方式工作,但如果可以这样做,这样就不需要while循环并且所有记录都通过一次调用返回,那就太好了。
在代码中查看这一点,似乎这个概念对我来说是草率的想法,但是将所有代码封装在一个地方会很棒。
也许做类似的事情:
$mysqli->fetchAll($id, $name, $age);
并返回绑定参数?我不知道我现在很困惑。
好的,重看这个。。
每次 Fetch 循环发生时,参数都会使用从数据库中检索到的行中的相关数据自动更新。
这里会发生或应该发生的是,当 FetchAll 被调用时,它会返回一个包含所有绑定参数和数据的关联数组,以便在此之后立即返回该数组,因为它是在 MYSQLI_STMT 类中创建的,然后返回到 FetchAll 最初被调用从。
砰!Presto Chango 和检索到的所有记录都在一个关联数组中,可供使用。看,全部封装。问题是.. 怎么样?无法让它工作。
感谢您阅读这个问题的坟墓。