我刚刚开始编码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中调用pdo_mysql_nonquery()
时,我收到此错误
Notice: Undefined variable: host
Notice: Undefined variable: dbname
Notice: Undefined variable: charset
Notice: Undefined variable: dbusername
Notice: Undefined variable: dbpassword
当我直接调用dbprovider.php并回显连接字符串时,它会打印出来。
我做错了什么?
答案 0 :(得分:0)
您已包含该文件,但值未传递到您的函数。
<?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));
}
&GT;
或者将这些变量设为GLOBAL VARIABLES
,以便可以在文件中的任何位置访问它们。
答案 1 :(得分:0)
您正在访问其范围之外的变量:
<?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凭证变量是在函数上方创建的。因此无法在函数内部访问。