我不能在不违反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);
}
两者都没有奏效。我发现的唯一可行的可能性是当我在我的函数中复制粘贴我的数据库配置时,但它不是一个选项,因为我需要在多个函数中执行查询。我该如何解决?
P.S。糟糕但工作代码:
//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);
}
答案 0 :(得分:0)
使用global
关键字并更改连接变量的范围并将数据库连接变量包含为函数参数都是完成此任务的有效方法。
但由于这些都不起作用,您可能在函数调用之前关闭了先前打开的连接。
mysqli_close($connection); <== Closed connection.
function writeLog($isError) <== Results in Error
function writeLog($isError, $connection) <== Results in Error