首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解包括

理解包括
EN

Stack Overflow用户
提问于 2015-11-06 12:03:32
回答 2查看 44关注 0票数 0

我刚刚开始编写php代码,我在包含文件方面遇到了问题。

我已经创建了3个文件

main.php

代码语言:javascript
复制
<?php
include "dbprovider.php";
$param = $_GET["q"];
if(!isset($param) || $param == ""){echo "Parameter null"; return;}

switch ($param) {
    case 'login':
        loginProc();
        break;
}

function loginProc()
{
    pdo_mysql_nonquery($somequery,$somearrayparameters);
}    
?>

dbprovider.php

代码语言:javascript
复制
<?php
include "config.php";
function pdo_mysql_nonquery($query,$params)
{
    $conn = new PDO("mysql:host={$host};dbname={$dbname};charset={$charset}",$dbusername,$dbpassword) or die("Couldn't connect to the database.");
    $query = $conn->prepare($query);
    return ($params == null ? $query->execute() : $query->execute($params));
}
?>

config.php

代码语言:javascript
复制
<?php
$host = '127.0.0.1';
$dbusername = 'root';
$dbpassword = '';
$dbname = 'dbname';
$charset = 'utf-8';
?>

我的问题是,我一定做错了什么,因为当我在main.php中调用main.php时,我得到了这个错误

代码语言:javascript
复制
Notice: Undefined variable: host
Notice: Undefined variable: dbname
Notice: Undefined variable: charset
Notice: Undefined variable: dbusername
Notice: Undefined variable: dbpassword 

当我直接调用dbprovider.php并回显连接字符串时,它会很好地打印出来。

我做错什么了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-06 12:05:36

您已经包含了该文件,但是值不会传递给您的函数。

代码语言:javascript
复制
<?php

    function pdo_mysql_nonquery($query,$params)
    {
        include "config.php";// move here
        $conn = new PDO("mysql:host={$host};dbname={$dbname};charset={$charset}",$dbusername,$dbpassword) or die("Couldn't connect to the database.");
        $query = $conn->prepare($query);
        return ($params == null ? $query->execute() : $query->execute($params));
    }

?>

或者将这些变量设置为GLOBAL VARIABLES,以便可以在文件中的任何地方访问它们。

票数 0
EN

Stack Overflow用户

发布于 2015-11-06 12:07:09

您正在访问超出其范围的变量:

代码语言:javascript
复制
<?php
function pdo_mysql_nonquery($query,$params)
{
    include "config.php";
    $conn = new PDO("mysql:host={$host};dbname={$dbname};charset={$charset}",$dbusername,$dbpassword) or die("Couldn't connect to the database.");
    $query = $conn->prepare($query);
    return ($params == null ? $query->execute() : $query->execute($params));
}
?>

代码语言:javascript
复制
<?php
include "config.php";
function pdo_mysql_nonquery($query,$params)
{
    global $host;
    global $dbname;
    // and so on
    $conn = new PDO("mysql:host={$host};dbname={$dbname};charset={$charset}",$dbusername,$dbpassword) or die("Couldn't connect to the database.");
    $query = $conn->prepare($query);
    return ($params == null ? $query->execute() : $query->execute($params));
}
?>

但我建议不要使用全局变量。

作为一种解释,includerequire只需在当前范围内获取文件的内容并对其进行评估。

在特定情况下,db凭据变量是在函数的上面创建的。因此,不能在函数中访问。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33566422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档