2015-06-12 80 views
-2

所以我做了一个函数来为我执行我的PDO查询,所以我不必继续输入它。这是功能。获取PDO函数也返回行数

if (!function_exists('query_db_select')) : 

function query_db_select($query, $where){ 
$query_params = array(
':var' => $where 
); 
    try { 
    $stmt = $db->prepare($query); 
    $stmt->execute($query_params); 
    } 
    catch (PDOException $ex){ 

    } 
    $count = $stmt->rowCount(); 
    if ($count == 1){ 
    return $stmt->fetch(); 
    } 
    return $stmt->fetchAll(); 


    } 
endif; 

所以,如果我用这个功能看起来这

$query = query_db_select("SELECT * FROM table WHERE column = :var", $something); 

的问题是,当我使用这个功能,我怎么可能得到的行数这个功能之外?我运行查询使用另一个PHP页面的功能,但我也想得到行计数以及fetch()

也希望一些建议如何使这个功能更好,如果你有任何想法。

+0

你不能,因为你要返回一组结果。该数组完全与db连接/查询的东西断开连接。如果你想要行计数,然后返回语句句柄,并在调用上下文中执行你的fetchAll。最坏的情况下,你可以'计数($查询)' –

+0

@MarcB这样做!我只是简单地使用'count($ query)',这就是我所需要的。非常感谢你。 – jham

回答

0

你要返回的是记录的多维数组。您可以遍历数组的方式可以从查询变为查询。返回行数和结果集的一种方法如下。

if (!function_exists('query_db_select')) : 

function query_db_select($query, $where){ 
$returnArray = array(); 
$query_params = array(
':var' => $where 
); 
    try { 
    $stmt = $db->prepare($query); 
    $stmt->execute($query_params); 
    } 
    catch (PDOException $ex){ 

    } 
    $count = $stmt->rowCount(); 
    $returnArray['rowcount'] = $count; 
    if ($count == 1){ 
    $returnArray['results'] = $stmt->fetch(); 
    return $returnArray; 
    } 
    $returnArray['results'] = $stmt->fetchAll(); 
    return $returnArray; 


    } 
endif; 

您可以稍后访问函数调用外部使用$returnArray['rowCount'];/* Or whatever your variable is that gets assigned to the return value. */的行数。

+0

这也适用。这也是很好的了解,考虑到我将有一大堆这些特定的功能来完成我的查询并保持更有条理。 – jham

0

我相信你可以做这样的事情:

if (!function_exists('query_db_select')) : 

function query_db_select($query, $where){ 
$query_params = array(
':var' => $where 
); 
    try { 
    $stmt = $db->prepare($query); 
    $stmt->execute($query_params); 
    } 
    catch (PDOException $ex){ 

    } 
    $myArray = $stmt->fetchAll(); 
    return array("count" => count($myArray), "elements" => $myArray); 


    } 
endif; 

我看到了不同的处理结果是没有意义的,如果有一个单一的元素。这是问题的温床。

+0

我遇到了一个用户页面的问题,我正在创建具有调用不同内容的不同部分。有些会调用一行,有些会调用每个在foreach中返回的行。它告诉我要么使用'fetch()'或'fetchAll()',这取决于返回的行数。在函数中使用count是我知道如何修复它的唯一方法。 – jham

+0

您已经在结果中具有“count”的值,并且如果count为1,则可以使用元素[0]。如果我要确保它更容易维护,我将使用此部分重构代码未来。 –