PHP PDO执行标准函数

PHP PDO执行标准函数,php,function,pdo,die,Php,Function,Pdo,Die,PDO新手。这是我的功能。我们连接到数据库,一切正常,但调用此函数时会杀死要执行的其余PHP。很明显,它有问题 $dbh = new PDO("mysql:host=$host;dbname=$database", $username, $password); global $dbh; /*** set the error reporting attribute ***/ $dbh->setAttribute(PDO::ATTR_ERRMO

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'].', '; } ?>
global $dbh;
///编辑-我已经尝试了您的所有方法,当在页面上调用该函数时,该函数仍处于中断状态。这是完整的代码。为测试目的进行了轻微修改

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(); 

    }
函数外部的代码(即,反映表系统的代码)工作正常,但函数内部的代码(稍后作为函数调用时)在调用后会清除所有内容,并且不会执行。

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

试试这个:

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

当您试图使用未定义的变量$dbh作为对象时,第二行生成一个致命错误

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

<?php $telephones = selectall('telephone'); foreach($telephones as $telephones) { echo $telephone['title'].', '; } ?>
global $dbh;
或者将其作为参数传递给函数


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

您不能将参数用于标识符db/列/表名、函数名等。它们不是这样工作的。这真的有效吗?首先,dbh美元从何而来?还有,检查错误如何?就像我说的,我们已经连接到数据库了。这不是你的问题,但是你应该仔细阅读bindparam和bindvalue之间的差异。如果这不是应该的工作方式,那么我应该如何获得类似的结果这是一个愚蠢的打字错误。无论如何,谢谢,我们有时都会错过这些东西好吧,我已经删除了变量,而是以数据库中一个表的名称。仍然没有,所以在这个函数之前添加了代码,因为我认为它将否定对全局的需要,就像您提供的那样。不,您需要向函数中添加global语句,告诉php$dbh在全局范围内。quote不适用于仅标识符的值。@RobinKnight当您调用函数时,$dbh已经设置为null。删除$dbh=null语句。