我有二维数组,键和值
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失败: /opt/lampp/htdocs/conductexam/admin/connTo.php 在行上未知的名称或服务13
警告:mysqli_connect():( HY000 / 2002):php_network_getaddresses:getaddrinfo failed: /opt/lampp/htdocs/conductexam/admin/connTo.php 在线 13
警告:mysqli_select_db()期望参数1为mysqli,在 /opt/lampp/htdocs/conductexam/admin/connTo.php 15 中给出布尔值/ b>
警告:mysqli_error()期望参数1为mysqli,布尔值 /opt/lampp/htdocs/conductexam/admin/connTo.php 在 16 < / b>
但是当我改为
时$conTo = mysqli_connect('localhost', 'root', '','conduct');
它的工作正常。怎么样?
任何人都可以帮助我吗?我真的很感谢你的帮助。提前谢谢大家。
答案 0 :(得分:0)
这与你的问题无关,不过这一行:
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]);
此代码实际上有机会工作,就像将参数作为字符串常量传递一样。