我刚刚开始编写php代码,我在包含文件方面遇到了问题。
我已经创建了3个文件
main.php
<?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
<?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
<?php
$host = '127.0.0.1';
$dbusername = 'root';
$dbpassword = '';
$dbname = 'dbname';
$charset = 'utf-8';
?>我的问题是,我一定做错了什么,因为当我在main.php中调用main.php时,我得到了这个错误
Notice: Undefined variable: host
Notice: Undefined variable: dbname
Notice: Undefined variable: charset
Notice: Undefined variable: dbusername
Notice: Undefined variable: dbpassword 当我直接调用dbprovider.php并回显连接字符串时,它会很好地打印出来。
我做错什么了?
发布于 2015-11-06 12:05:36
您已经包含了该文件,但是值不会传递给您的函数。
<?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,以便可以在文件中的任何地方访问它们。
发布于 2015-11-06 12:07:09
您正在访问超出其范围的变量:
<?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));
}
?>或
<?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));
}
?>但我建议不要使用全局变量。
作为一种解释,include和require只需在当前范围内获取文件的内容并对其进行评估。
在特定情况下,db凭据变量是在函数的上面创建的。因此,不能在函数中访问。
https://stackoverflow.com/questions/33566422
复制相似问题