如何在php中使用单个变量连接到数据库


How to connect to database using single variable in php

我有一个包含键和值的二维数组

   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]);

这段代码实际上有机会工作,就像你将参数作为字符串常量传递时一样。