PHP PDO执行标准功能


PHP PDO execute standard function

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(); 
    }
函数

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

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

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

global $dbh;

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

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

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

试试这个:

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