0

PDO 的新手。这是我的功能。我们已连接到数据库,一切正常,但调用此函数时会杀死要执行的 PHP 的其余部分。显然它有问题。

$dbh = new PDO("mysql:host=$host;dbname=$database", $username, $password);
        global $dbh;

        /*** set the error reporting attribute ***/
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

function selectall($table){
            $stmt = $dbh->prepare("SELECT * FROM :table");
            $stmt->bindParam(':table', $table, PDO::PARAM_STR,20);
            $stmt->execute();
            $result = $stmt->fetchAll();
            return $result;
        }

在这样的页面上调用:

<?php $telephones = selectall('telephone'); foreach($telephones as $telephones) { echo $telephone['title'].', '; } ?>

/// 编辑 - 我已经尝试了你所有的方法,并且在页面上调用该函数时仍然中断。这是整个代码。出于测试目的稍作修改。

try { 

        $dbh = new PDO("mysql:host=$host;dbname=$database", $username, $password);

        /*** set the error reporting attribute ***/
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        $sql = "SELECT * FROM system";
        foreach ($dbh->query($sql) as $row)
            {
            $url = $row['url'];
            $election = $row['election'];
            $election_date = $row['election_date'];
            $sitename = $row['sitename'];
            }


        //FUNCTION

        function selectall($table){
            global $dbh;
             $sql = "SELECT * FROM telephone";
            foreach ($dbh->query($sql) as $row){
                print $row['title'] .' - '. $row['name'] . '<br />';
            }
        }


        /** close database connections **/
        $dbh = null;

    }

    catch(PDOException $e) { 

        echo $e->getMessage(); 

    }

函数外的代码,即。反映表系统的那个工作正常但是函数内部的那个在稍后作为函数调用时会在调用后杀死所有内容并且没有执行。

4

2 回答 2

0

我认为问题是:$telephones as $telephones

试试这个:

$telephones = selectall('telephone'); foreach($telephones as $telephone) { echo $telephone['title'].', '; }
于 2012-07-01T14:50:31.953 回答
0

当您尝试将未定义的变量 ( $dbh) 用作对象时,您的第二行会生成一个致命错误。

您需要像这样从全局范围导入它:

global $dbh;

或将其作为参数传递给函数。

修复此问题后,您的代码仍然无法工作,因为您不能将参数用于标识符(表或列名,甚至在限制和偏移中)。不幸的是,您必须在那里使用字符串连接。

于 2012-07-01T14:52:37.803 回答