繁体   English   中英

PHP功能看不到mysqli连接

[英]Php function doesn't see mysqli connection

我不能在不违反DRY原理的情况下在php函数中使用mysqli查询。 在执行功能之前,我具有以下mysql配置代码:

//database configuration
$config['mysql_host'] = "myhost.eu-west-2.rds.amazonaws.com";
$config['mysql_user'] = "mylogin";
$config['mysql_pass'] = "mypassword";
$config['db_name']    = "mydbname";
$config['table_name'] = "mytablename";
$connection = mysqli_connect($config['mysql_host'],$config['mysql_user'],$config['mysql_pass'], $config['db_name']);

我的函数如下所示:

function writeLog($isError) {
    global $connection, $ipLong, $datetime, $procedure_index, $gotResults;
    $sql = "INSERT INTO  user_log VALUES (NULL, ";
    $sql .= "\"$ipLong\", \"$datetime\", \"$procedure_index\", \"$gotResults\", \"$isError\"";
    $sql .= ");";
    mysqli_query($connection, $sql);
}

我也尝试将连接作为输入变量发送,如下所示:

function writeLog($isError, $connection) {
    global $ipLong, $datetime, $procedure_index, $gotResults;
    $sql = "INSERT INTO  user_log VALUES (NULL, ";
    $sql .= "\"$ipLong\", \"$datetime\", \"$procedure_index\", \"$gotResults\", \"$isError\"";
    $sql .= ");";
    mysqli_query($connection, $sql);
}

都没有工作。 我发现的唯一可行方法是在我的函数中复制粘贴数据库配置时,但这不是一个选择,因为我需要在多个函数中执行查询。 我该如何解决?

PS错误,但工作代码:

//database configuration
$config['mysql_host'] = "myhost.eu-west-2.rds.amazonaws.com";
$config['mysql_user'] = "mylogin";
$config['mysql_pass'] = "mypassword";
$config['db_name']    = "mydbname";
$config['table_name'] = "mytablename";
$connection = mysqli_connect($config['mysql_host'],$config['mysql_user'],$config['mysql_pass'], $config['db_name']);

function writeLog($isError) {
    //database configuration, again. totally violating DRY principle.
    $config['mysql_host'] = "myhost.eu-west-2.rds.amazonaws.com";
    $config['mysql_user'] = "mylogin";
    $config['mysql_pass'] = "mypassword";
    $config['db_name']    = "mydbname";
    $config['table_name'] = "mytablename";
    $connection = mysqli_connect($config['mysql_host'],$config['mysql_user'],$config['mysql_pass'], $config['db_name']);

    global $ipLong, $datetime, $procedure_index, $gotResults;
    $sql = "INSERT INTO  user_log VALUES (NULL, ";
    $sql .= "\"$ipLong\", \"$datetime\", \"$procedure_index\", \"$gotResults\", \"$isError\"";
    $sql .= ");";
    mysqli_query($connection, $sql);
}

使用global关键字并更改连接变量的范围以及将数据库连接变量作为函数参数包括在内都是完成此任务的有效方法。

但是由于这两个都不起作用,因此可能在函数调用之前关闭了先前打开的连接。

mysqli_close($connection); <== Closed connection.

function writeLog($isError) <== Results in Error
function writeLog($isError, $connection) <== Results in Error

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM