【问题标题】:Cannot get data无法获取数据
【发布时间】:2019-10-22 10:12:22
【问题描述】:

我正在尝试获取我的数据库文件,该文件格式为 csv(excel 文件),但它甚至没有将数据发送到浏览器。

我还没有尝试过,因为我害怕我会做得比现在更糟......

我的 PHP 代码(我已经连接到数据库,但我不想公开显示我的信息):

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

// Create connection
$db = new mysqli($dbhost, $dbusername, $dbpassword, $dbname);

$allData = "";
$query = 'SELECT * FROM members';
  $retval = mysqli_query( $db,$query );
   if(! $retval ) {
      die('Could not get data.');
   }
   while($row = mysqli_fetch_array($retval)) {
  $allData .= $row['Id'] . ',' . $row['Email'] . ',' . $row['Condition'] .     ',' . $row['isEmailConfirmed'] . ',' . $row['Name'] . ',' .         $row['LastName'] . ',' . $row['Token'] . ',' .$row['Type'] . ',' .         $row['extra_privileges'] . ',' . $row['access-to-ftp'] . ',' .$row['access-    to-panel'] . ',' . $row['Birthdate'] . ',' . $row['Password'] . ',' .     $row['Description'] . "\n";
  //$retval = "data:text/csv;charset=utf-    8,ID,EMAIL,CONDITION,ISEMAILCONFIRMED,NAME,LASTNAME,TOKEN,TYPE,EXTRA_PRIVIL    EGES,ACCESS-TO-FTP,ACCESS-TO-PANEL,BIRTHDATE,PASSWORD,DESCRIPTION\n";
  $retval .= $allData;

  echo $retval;
  }
?>

它只是告诉我无法获取数据,我将其作为一个死解决方案。

【问题讨论】:

  • Die 不是调试的好方法。启用异常模式和 php 错误报告。 How to enable MySQLi exception mode?
  • 我会试试.....
  • @Dharman 注意:未定义变量:第 15 行 /var/www/vhosts/photoshare.ga/database.photoshare.ga/backup/confirmed/index.php 中的 db 警告:mysqli_query() 需要参数 1 为 mysqli,在第 15 行的 /var/www/vhosts/photoshare.ga/database.photoshare.ga/backup/confirmed/index.php 中给出 null 无法获取数据。
  • 那是因为你已经用 MySQLi 连接命名你的变量$conn,但是你尝试使用$db。这是一个错字。
  • Hmmmmmm 你能看看这个吗?

标签: php mysql database mysqli


【解决方案1】:

您的问题是您正在重复使用相同的变量并且您正在丢失您的数据库结果。

$sql = 'SELECT * FROM members';
$retval = mysqli_query($db, $sql);
// ^^^^ This PHP variable holds your DB results
if (!$retval) {
    die('Could not get data.');
}
//  Each iteration of the loop you reach for a single row from the result $retval
while ($row = mysqli_fetch_array($retval)) {
    $allData .= $row['Id'] . ',' . $row['Email'] . ',' . $row['Condition']     . ',' . $row['isEmailConfirmed'] . ',' . $row['Name'] . ',' .     $row['LastName'] . ',' . $row['Token'] . ',' .$row['Type'] . ',' .     $row['extra_pivileges'] . ',' . $row['access-to-ftp'] . ',' .$row['access-to    panel'] . ',' . $row['Birthdate'] . ',' . $row['Password'] . ',' .     $row['Description'] . "\n";
    $retval = "data:text/csv;charset=utf-8,ID,EMAIL,CONDITION,ISEMAILCONFIRMED,NAME,LASTNAME,TOKEN,TYPE,EXTRA_PRIVILEG    ES,ACCESS-TO-FTP,ACCESS-TO-PANEL,BIRTHDATE,PASSWORD,DESCRIPTION\n";
    $retval .= $allData;
    // ^^^ but here you are using the same variable, thus losing its previous contents. 

    echo $retval;
}

更改您的 PHP 结果的名称,不要覆盖它。例如:

$sql = 'SELECT * FROM members';
$result_of_DB_select = mysqli_query($db, $sql);
// ^^^^ This PHP variable holds your DB results
if (!$result_of_DB_select) {
    die('Could not get data.');
}

// CSV header before the loop:
$CSV_response = "data:text/csv;charset=utf-8,ID,EMAIL,CONDITION,ISEMAILCONFIRMED,NAME,LASTNAME,TOKEN,TYPE,EXTRA_PRIVILEG    ES,ACCESS-TO-FTP,ACCESS-TO-PANEL,BIRTHDATE,PASSWORD,DESCRIPTION\n";

//  Each iteration of the loop you reach for a single row from the result variable called $result_of_DB_select 
while ($row = mysqli_fetch_array($result_of_DB_select)) {
    $CSV_response .= $row['Id'] . ',' . $row['Email'] . ',' . $row['Condition']     . ',' . $row['isEmailConfirmed'] . ',' . $row['Name'] . ',' .     $row['LastName'] . ',' . $row['Token'] . ',' .$row['Type'] . ',' .     $row['extra_pivileges'] . ',' . $row['access-to-ftp'] . ',' .$row['access-to    panel'] . ',' . $row['Birthdate'] . ',' . $row['Password'] . ',' .     $row['Description'] . "\n";
    // ^^^ different variable holds your CSV response now and you will not lose contents of $result_of_DB_select. 
}
echo $CSV_response;

【讨论】:

  • 如果您想将 CSV 标头保留在循环中并为每一行返回它,那么您可以将其放入循环中。我假设你只想要它在顶部一次,然后是之后的所有行。
  • 好的,现在我明白了...非常感谢@Dharman 的帮助!
猜你喜欢
  • 2021-12-25
  • 2015-10-27
  • 2018-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多