【问题标题】:Fetch rows using mysqli使用 mysqli 获取行
【发布时间】:2013-12-06 04:59:02
【问题描述】:

它是一个简单的代码。每次上传文件时,我都想在数据库中保留记录。当每次上传任何文件时,我希望用户从数据库中看到他/她所有上传的文件。上传文件时的记录保存工作正常。但是在获取包含所有上传文件信息的表时出现问题。

//connetion code 
$con = mysqli_connect("localhost", "root", "", "sss");

if (mysqli_connect_errno()) 
{
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

//file upload code
move_uploaded_file($_FILES["file"]["tmp_name"],"C:/xampp/htdocs/" . $_FILES["file"]["name"]);
mysqli_query($con, "INSERT INTO uploads ( filename, uploaded_on) VALUES ( '{$_FILES['file']['name']}', NOW());");
echo "Stored in: " . "C:/xampp/htdocs/" . $_FILES["file"]["name"];

//fetch rows 
$result =mysqli_query($con, "select * from uploads");

while ($row = mysqli_fetch_array($result))
{
    printf ("%s\n", $row);
}

mysqli_close($con);
}

我能感觉到编码中有一些严重的问题。这是我第一次在 mysqli 工作,之前我使用 mysql 进行编码。需要帮助才能了解实际问题和解决方案。

已编辑: 它返回这个,

Notice: Array to string conversion in C:\xampp\htdocs\sss\upload_file.php on line 68
Array

Notice: Array to string conversion in C:\xampp\htdocs\sss\upload_file.php on line 68
Array

Notice: Array to string conversion in C:\xampp\htdocs\sss\upload_file.php on line 68
Array

但不幸的是,这段代码是巨大代码的一部分。所以这里第 68 行是 $result = mysqli_query($con, "select * from uploads"); 开始的行。

【问题讨论】:

  • $row 将是一个数组。在字符串上下文中打印一个数组只会给你Array。您的上传处理也是非常不安全的,并且除了容易受到 SQL 注入攻击之外,恶意用户还可以在您的服务器上随处乱写他们的文件。如果您尝试过,您将无法编写 LESS 安全代码。同样,您在 while 循环中关闭了数据库连接,因此即使其他一切正常,您也只能打印出 ONE 记录。
  • 我想我已经描述了我想要什么和什么不起作用。请我的要求,再读一遍。 @约翰康德
  • @user3017315 - 不,您说您的代码“不起作用”。你得到一个空白屏幕吗?错误信息?它不返回任何行吗?一些行?所有的行?打印出错误的东西?正确的事情,错误的方式?有许多事情可能不起作用。
  • 没有。仔细看,db连接在while循环内没有关闭。请仔细查看。 @MarcB
  • 啊,我明白了。您需要正确缩进代码...不,您没有正确描述问题。您只是说“此代码不起作用”。不工作如何?崩溃?错误的结果?删除不应该删除的内容?踢你的狗?

标签: php mysqli


【解决方案1】:
$result =mysqli_query($con, "select * from uploads");
while ($row = mysqli_fetch_assoc($result))
   {
      printf ("%s\n", $row['column_name_1']);
      printf ("%s\n", $row['column_name_2']);
      printf ("%s\n", $row['column_name_3']);
   }
mysqli_close($con);

但您应该认真考虑查看代码的安全性。

【讨论】:

  • 我认为这不会解决它 - 这将在第一次迭代时打印 $row 中的第一项;第二次迭代时 $row 中的第二项,依此类推。
  • 它至少会修复他得到的错误并打印出数组的值。
  • 它将从结果集中的每一行打印出一个值;每次来自不同的列。如果结果多于列数,它也会失败。
  • 抱歉错过了从上传中选择 *。尝试使用 mysqli_fetch_assoc()。它返回一个关联数组。
猜你喜欢
  • 2012-02-12
  • 1970-01-01
  • 1970-01-01
  • 2011-03-27
  • 2013-11-16
  • 1970-01-01
  • 2013-11-25
相关资源
最近更新 更多