【问题标题】:PHP PDO execute standard functionPHP PDO 执行标准函数
【发布时间】:2012-07-02 05:30:04
【问题描述】:

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

    }

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

【问题讨论】:

  • 不能将参数用于标识符(db/column/tablenames)、函数名等。它们不是这样工作的。
  • 这真的有效吗?首先,$dbh 来自哪里?另外,检查错误怎么样?
  • 就像我说的,我们已经连接到数据库了。
  • 不是您的问题,但您应该阅读 bindparam 和 bindvalue 之间的区别。
  • 如果这不是它应该如何工作,那么我应该如何获得类似的结果

标签: php function pdo die


【解决方案1】:

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

试试这个:

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

【讨论】:

  • 这是一个愚蠢的错字。无论如何,谢谢我们有时都会错过这些东西
【解决方案2】:

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

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

global $dbh;

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

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

【讨论】:

  • 好的,我已经删除了变量,而是以数据库中表的名称。还是什么都没有
  • 还在此函数之前添加了代码,因为我认为它会否定您提供的对全局的需求
  • 不行,需要在函数中加入global语句告诉php$dbh在全局范围内。
  • quote() 不适用于标识符 - 仅适用于值。
  • @RobinKnight 当您调用该函数时,$dbh 已设置为 null。删除$dbh=null 语句。
猜你喜欢
  • 2012-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-17
  • 2016-11-19
  • 1970-01-01
相关资源
最近更新 更多