使用其他数据库表中的信息连接到数据库?

时间:2015-10-14 13:50:21

标签: php mysql database

是否可以使用已连接的数据库中的表连接到数据库。

这就是我想要的:

我有一个名为regdbhost,regdbuser,regdbname和regdbtable的表的数据库。在表格中,您可以获得要连接的信息。例如,regdbhost = localhost,regdbuser = username,regdbname = database name。

这是我的代码          

// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
} 
echo "Connected successfully";
?>

<?php 
if(!isset($_SESSION['logged_in']) || $_SESSION['logged_in'] == false) 
{ 
header('Location: index.php'); 
exit(); 
}  

header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=inschrijvingen.csv');

// create a file pointer connected to the output stream
$output = fopen('php://output', 'w');

// output the column headings
fputcsv($output, array('id','Name', 'Email', 'age','tekens'));

// fetch the data
$table = "user";
$query = mysql_query("SELECT regdbhost,regdbuser,regdbpass,regdbname,regdbtable FROM $table");

while($result = mysql_fetch_array($query))
{   
$regdbhost = '.$result["regdbhost"].';
$regdbuser = '.$result["regdbuser"].';
$regdbpass = '.$result["regdbpass"].';
$regdbname = '.$result["regdbname"].';
$regdbtable = '.$result["regdbtable"].';
$link = mysql_connect($regdbhost, $regdbuser, $regdbpass);
mysql_set_charset('utf8',$link);
mysql_select_db($regdbname);
$rows = mysql_query('SELECT * FROM $regdbtable');
}
// loop over the rows, outputting them
while ($row = mysql_fetch_assoc($rows)) 
fputcsv($output, $row);

?>

我试图像这样连接它,但它没有用。我做错了什么?

好的,我修好了。

我改变了这个:

$rows = mysql_query('SELECT * FROM $regdbtable');

$rows = mysql_query("SELECT * FROM $regdbtable");

2 个答案:

答案 0 :(得分:1)

正如其他人所说,不推荐使用MySQL扩展,你应该停止使用它。 Why shouldn't I use mysql_* functions in PHP?

中的更多信息

至于你的代码,它不起作用的问题在于:

$regdbhost = '.$result["regdbhost"].';
$regdbuser = '.$result["regdbuser"].';
$regdbpass = '.$result["regdbpass"].';
$regdbname = '.$result["regdbname"].';
$regdbtable = '.$result["regdbtable"].';

在这里:

$rows = mysql_query('SELECT * FROM $regdbtable');

在单引号内不会展开变量,因此$regdbhost的值将为.$result["regdbhost"].,而不是$result["regdbhost"]中实际包含的值。

此外,您尝试将值连接到字符串的方式也是错误的。你没有在引号内连接,你在引号之外进行连接:

$myVar = 'Hello, ' . $name . '!';

但是,在您的情况下,您不需要任何连接,因为您可以直接分配值:

$regdbhost = $result["regdbhost"];

因此,如果您修复处理$result内容的方式并在以下SELECT语句中切换为双引号,那么您的代码应该可以正常工作。

除了检查切换到其他数据库扩展的原因外,如果您打算在查询中使用用户输入,我还建议您查看How can I prevent SQL-injection in PHP?

答案 1 :(得分:-1)

我建议您在将内容放入文本文件之前收集内容。此外,我建议限制您的查询或添加WHERE语句。如果您获得多组凭据,则该脚本可能无法成功登录。

<?php
// Check connection
if ($conn->connect_error) {
    die("First Connection failed: " . $conn->connect_error);
}  
if(!isset($_SESSION['logged_in']) || $_SESSION['logged_in'] == false){ 
    header('Location: index.php'); 
    exit(); 
}

// fetch the Login data
$table = "user";
$query = mysql_query("SELECT regdbhost,regdbuser,regdbpass,regdbname,regdbtable FROM $table LIMIT 1");

if (!$query) {
    echo 'First Could not run query: ' . mysql_error();
    exit();
}
while($result = mysql_fetch_array($query)){   
    $regdbhost = $result["regdbhost"];
    $regdbuser = $result["regdbuser"];
    $regdbpass = $result["regdbpass"];
    $regdbname = $result["regdbname"];
    $regdbtable = $result["regdbtable"];
}
mysql_free_result($result);

// Create new connectiong with DB credentials from other table
$link = mysqli_connect($regdbhost, $regdbuser, $regdbpass, $regdbname);
if (mysqli_connect_errno()) {
    printf("Second Connect failed: %s\n", mysqli_connect_error());
    exit();
}
$fetchResults = array();
if ($result = mysqli_query($link, "SELECT * FROM $regdbtable"){
    while ($row = mysqli_fetch_assoc($result)) {
        $fetchResults[] = $row;
    }
    mysqli_free_result($result);
}
mysqli_close($link);

header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=inschrijvingen.csv');

// create a file pointer connected to the output stream
$output = fopen('php://output', 'w');

// output the column headings
fputcsv($output, array('id','Name', 'Email', 'age','tekens'));

// loop over the rows, outputting them
foreach($fetchResults as $row){
    fputcsv($output, $row);
}
?>