2009-07-02 39 views
2

PHP的MySQLi功能非常棒。PHP Mysqli fetch_assoc

准备好的语句非常适合在查询中注入参数。

但是,如果您使用语句,看起来您没有权限访问fetch_assoc功能。您必须手动绑定所有结果。这意味着我的SQL查询必须列出所有字段,然后在获取结果时(使用bind_result),我必须提前列出所有变量。这可能会变得非常烦人和浪费时间。

是否有替代方案?

感谢

回答

1

MySQLi确实提供了处理此问题的方法,请参阅result_metadata函数。

我写了一个类,允许无障碍的参数化的MySQLi查询 - 下载和基本使用信息,请访问:http://www.robpoyntz.com/blog/?p=191

+0

如果您有兴趣,我已经使用相同的接口创建了一个PDO版本,所以替代上面的MySQLi代码。有趣的是,PDO版本似乎比MySQLi版本快了近50%。源代码可在此处找到:http://www.robpoyntz.com/blog/?p=260 – 2009-07-21 12:36:17

4

是的,这就是所谓的PDO,通常首选的MySQLi。它提供具有常规提取选项的语句,并不强制您显式绑定所有参数。典型的查询可能如下所示:

$stmt = $db->prepare("SELECT * FROM foo WHERE a = ?"); 
$stmt->execute(array($a)); 

$result = $stmt->fetchAll(PDO::FETCH_ASSOC); 

PDO非常灵活,所以它也可以以其他方式使用。手册中有很多很棒的例子。看一看!

+1

不错,PDO看起来比使用mysqli的用于准备一个痛苦的有点少语句:) – Jason 2009-07-03 07:27:40