是否可以使用已连接的数据库中的表连接到数据库。
这就是我想要的:
我有一个名为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");
答案 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);
}
?>