如何构建一个使用PHP连接到PDO并运行查询的函数?

时间:2013-03-22 23:45:52

标签: php mysql pdo

我正在尝试编写几个函数,以便以后可以使用PDO对象将它们连接到数据库。我做了一个返回数据,一个用于计数,另一个用于插入。

我的问题是,当有异常时,非他们会返回异常。而且我不确定在哪里需要添加一行来释放存储结果?

这是我目前的职能

function getDataSet($query, $connection){

    $cmd = $connection->query( $query );
    return $cmd->fetchAll(PDO::FETCH_ASSOC);

}


function getResultsCount($query, $connection){

    $cmd = $connection->query( $query );
    return $cmd->fetchColumn();

}

function insertRecord($query, $connection){

    $cmd = $connection->query( $query );
    $connection->free();
    return $cmd;

}

这就是我在我的应用程序中使用这些功能的方法

        try {
        $data = getDataSet(' SELECT name FROM TABLE LIMIT 1000', $db);

            foreach($data AS $row){
                echo $row[0]['name'] . '<br />';
            }

        }  catch(PDOException $e){
            echo 'an error encountered'. $e->getMessage();
        }
unset($data);

总结我的问题 如何让这些功能在返回后获得免费结果? 一旦存在,我怎么能返回异常? 我可以使用更好的功能吗? 是否有一个函数来处理prepare语句并返回结果?

谢谢:)

1 个答案:

答案 0 :(得分:1)

总能很高兴看到这么好的编程问题。虽然很少见。

你有一个很好的目标,写下所有这些功能,虽然有一个重大错误。您使用它们作为单独的功能,这没有多大意义。所有这些函数都必须是使用内部类资源的数据库类的方法。

虽然你可以从tag wiki,获得大部分答案,但似乎这个网站从未引导它访问这个知识缓存,鼓励他们提出一个新问题,而不是阅读已经写好的答案。那么,你走了:

  

如果一旦存在,我怎么能返回异常?

要制作PDO trow异常,您必须设置相应的选项:

$dsn = "mysql:host=localhost;dbname=test;charset=utf8";
$opt = array(
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
);
$pdo = new PDO($dsn,'root','', $opt);

以这种方式实例化PDO将开始在mysql错误上抛出异常。

  

是否有处理prepare语句并返回结果的函数?

写下来。
你为什么不想在你的函数中使用prepare / execute?这是一个(是一个类方法,而不是单独的函数):

function getDataSet($query,$data = NULL)
{
    $cmd = $this->conn->prepare( $query );
    $cmd-> execute($data);
    return $cmd->fetchAll();
}

现在您将能够使用参数化查询以及非参数化查询:

$data = $db->getDataSet('SELECT name FROM TABLE LIMIT 1000');
$data = $db->getDataSet('SELECT name FROM table WHERE id < ? LIMIT 1000',array($id));
foreach($data AS $row){
    echo $row['name'] . '<br />';
}

(请注意,你不应该只使用try-catch来回显错误信息 - PHP已经做到了,而且更好的方式)

  

我需要在内存中添加一行来释放结果吗?

我根本不会打扰。它们将被自动清除。

  

function getResultsCount($ query,$ connection){

事实上,这个功能可以做的不仅仅是返回一个计数。它实际上可以返回查询返回的任何标量值。所以,最好称之为getOneResult或类似的东西:

$name = $db->getDataSet('SELECT name FROM table WHERE id=?',array($id));
  

function insertRecord($ query,$ connection){

这个函数再次被命名为错误的方式。事实上,它必须只是通用的query()函数,它可用于运行INSERT,UPDATE,DELETE或其他任何查询。

  

我可以使用更好的功能吗?

嗯,毫无疑问,我认为my own class为此目的而写的更好:) 您可以按原样自由使用它,或者只为您自己的课程获得一些想法。