2013-05-21 29 views
0

对于数据库查询正在返回的数据执行特定的PHP函数时,在该查询仍在运行的那一刻?SQL选择者上的PHP函数

比方说,我们是在一些班级,我们有以下的伪SQL应该返回两行:

$results = $this->db->query("SELECT PHP_function(column), column 2 FROM table")->fetchAll(PDO::FETCH_ASSOC); 

PHP_function可以json_decode例如。

或者这是不可能的,它会需要一个额外的循环结果才能做到这样的事情?

+0

为什么你想在查询时做到这一点,而不是以后呢? – moonwave99

+0

查询运行时为什么需要它?之后循环数据有什么问题? –

+0

如果您需要RDBMS尚未提供的功能(它提供了很多功能),则可能需要[用户定义的功能](http://dev.mysql.com/doc/refman/5.1/en/adding-functions .html) –

回答

2
+0

关于如何强制PDO :: FETCH_FUNC参数关联的任何建议? PDO :: FETCH_ASSOC不能实现这一点。这当然是因为参数不能真正关联,因此从'func_get_args'接收数字索引的数组是自然的行为。我宁愿将一个参数传递给FETCH_FUNC的函数,该函数将是从数据库查询返回的列的索引数组。 – user2180613

+0

我不会浪费时间研究,而是在while循环中使用fetch()而不是fetchAll(),并在此循环中应用任何复杂的逻辑。 –

0

不,这是不可能的。 SQL引擎(mysql或其他)是一个独立的应用程序。 PHP可以与它进行通信,发送查询和接收数据。根据你想要在那个自定义函数中做什么,你可能能够在mysql中编写一个自定义函数来做同样的事情。

看看create function documentation了解如何做到这一点。

+0

在PDO之前,我曾经能够在while循环中执行任何函数' ($ row = mysql_fetch_assoc($ query))'查询后,所以我希望有一些方法可以访问这个循环。我想这是在PDO的'fetchAll'方法。编辑:没有看到YCS的答案,但现在StackoverFlow警告我在接下来的六分钟内不接受任何东西。 – user2180613

+0

@ user2180613这与您所问的不一样。你仍然可以做循环,但是你不能在select子句中使用php函数。 –

+0

我知道这是不可能混合两种语言的功能。看到我的问题的第一句话。 – user2180613

0

如果这个问题?

<?php 
    foreach($results as $key=>$res){ 
     $results[$key]['column'] = PHP_function($res['column']); 
    } 

那旁边MySQL有一些有用的functions已经包含,所以也许这就是你需要的是在查询使用权

0

据我所知这是不可能实现的php的操作,而查询的运行,你需要取得结果,然后循环使用预定义的函数