我有一个包含键和值的二维数组
Array (
[conduct] =>
Array ( [databaseName] => conduct
[databaseKey] => 'localhost', 'root', '','conduct' )
[conducttest] =>
Array ( [databaseName] => conducttest
[databaseKey] => 'localhost', 'root', '','conducttest' )
[test] =>
Array ( [databaseName] => test
[databaseKey] => 'localhost', 'root', '','test' )
)
我有一个下拉表,其中包含数据库名称,当用户选择任何数据库名称,我想与该数据库连接。为此,我创建了二维数组,存储数据库名和连接字符串。
当表单提交的时候,我已经把这些名称和连接字符串发送给了php。
这里是我的PHP代码:
<?php
if(!isset($_SESSION)){session_start();}
include "includes/timezone.php";
$currentURL = (@$_SERVER["HTTPS"] == "on") ? "https://" : "http://";
$currentURL .= $_SERVER["SERVER_NAME"];
$url = $_SERVER['PHP_SELF'];
$url = $currentURL.str_replace("/admin/connTo.php","",$url);
$key = isset($_REQUEST['key']) ? $_REQUEST['key'] : "";
$dbname = isset($_REQUEST['name']) ? $_REQUEST['name'] : "";
$conTo = mysqli_connect($key);
if (!mysqli_select_db($conTo, $dbname)) {
die("Error : ".mysqli_error($conTo));
}
if (mysqli_connect_errno()){
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
mysqli_query($conTo,"SET character_set_results='utf8'");
mysqli_query($conTo,"SET NAMES utf8");
mysqli_query($conTo,"SET GLOBAL time_zone='+05:30'");
mysqli_query($conTo,"SET time_zone='+05:30'");
mysqli_query($conTo,"SET system_time_zone='+05:30'");
mysqli_query($conTo,"SET GLOBAL max_connect_errors=100000");
mysqli_query($conTo,"SET GLOBAL max_connections=100000");
mysqli_query($conTo,"SET GLOBAL connect_timeout=100");
mysqli_query($conTo,"SET GLOBAL max_user_connections=100000");
if(isset($conTo) && isset($_REQUEST['key'])){
echo "1";
} else if(isset($_REQUEST['key'])){
echo "0";
}
?>
我100%肯定$key得到正确的连接字符串,但我的代码显示以下错误:
警告: mysqli_connect(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /opt/lampp/htdocs/conductor/admin/connTo.php on line 13
警告: mysqli_connect(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name or service not known in /opt/lampp/htdocs/conductexam/admin/connTo.php on line 13
警告: mysqli_select_db()期望参数1为mysqli,布尔值在/opt/lampp/htdocs/传导/admin/connTo.php on line 15
警告: mysqli_error()期望参数1为mysqli,布尔值在/opt/lampp/htdocs/conductexam/admin/connTo.php on line 16
但是当我改成
$conTo = mysqli_connect('localhost', 'root', '','conduct');
工作得很好。如何?
有人能帮我吗?我非常感谢你的帮助。提前感谢大家。这与你的问题无关,但是这一行:
if(!isset($_SESSION)){session_start();}
不能使用。如果你正在使用会话,那么你需要在你的脚本的顶部有一个session_start()。
关于你的问题,你误解了mysqli_connect。它需要参数,而不是单个字符串或数组。
我不清楚如果你试图表明你正在使用javascript传递这些参数到一个表单变量,但这听起来像一个坏主意。大多数人会在包含的脚本中拥有凭据。
但是,让我们假设您要继续使用现有的方案:
$key = isset($_REQUEST['key']) ? $_REQUEST['key'] : "";
$params = explode(',', $key);
$conTo = mysqli_connect($params[0], $params[1], $params[2], $params[3]);
这段代码实际上有机会工作,就像你将参数作为字符串常量传递时一样。