【问题标题】:Can't echo data from database (array), PHP [closed]无法从数据库(数组)中回显数据,PHP [关闭]
【发布时间】:2014-01-15 15:28:24
【问题描述】:

我的代码的目的是从数据库中获取所有用户名,并以升序回显它们,每个用户名之间有一个中断。除了一行之外,它似乎工作正常。

当我运行这段代码时,我得到了错误

致命错误:第 23 行的 C:\wamp\www\Site files\users.php 中不支持的操作数类型

我在代码中用 ** 在它的 ether 侧突出显示了这一行。我已经尝试了很多方法来完成这项工作,但我不是特别胜任,我似乎找不到解决方案。

<?php
$host="localhost"; // Host name 
$username="root"; // Mysql username 
$password=""; // Mysql password 
$db_name="comproject"; // Database name 
$tbl_name="members"; // Table name 

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

$query = mysql_query("SELECT username FROM members ORDER BY username ASC") or die(mysql_error());
$count = mysql_num_rows($query);
$array = array();
while ($row = mysql_fetch_array($query, MYSQL_NUM)) {
$array[] = $row; }

for ($i=0; $count>$i; $i++) {
    **echo $array[$i] + "<br/>";**
}
?>

另外我正在尝试将我的代码移动到 mysqli 中,所以如果您对此有任何建议,也非常感谢 :) 我理解它几乎相同

【问题讨论】:

  • 在 PHP 中,您使用 . 进行连接,而不是 +(就像在 JavaScript 中那样)。请参阅文档:php.net/manual/en/language.operators.string.php
  • 为什么要将查询结果复制到数组中,然后才循环遍历数组并回显其输出?为什么不在while 循环中使用echo $row[0]

标签: php mysql arrays mysqli


【解决方案1】:

在 PHP 中,字符串使用. 而非+ 连接。试试:

echo $array[$i] . "<br/>";

【讨论】:

  • 谢谢,但现在出现新错误“注意:第 23 行 C:\wamp\www\Site files\users.php 中的数组到字符串转换”。它也一遍又一遍地呼应着“阵列”。顺便说一句,这和以前一样
  • @Shard $array 包含数组。您希望它们如何显示?
  • @Shard 尝试: echo $array[$i][0] 。 "
    ";
  • 感谢@Jim 效果很好
【解决方案2】:

改成这样:

for ($i=0; $count>$i; $i++) {
  echo $array[$i][0] . "<br/>";
}

问题是:

  1. 您将字符串与. 连接起来,并且
  2. $array[$i] 是一个数字索引数组,第一个元素是用户名:

$array 是:

  Array
  (
      [0] => Array
          (
              [0] => UsernameOne
          )

      [1] => Array
          (
              [0] => UsernameTwo
          )

  )

【讨论】:

  • 完美,非常感谢。为什么 [0] 是必要的?
  • 因为$array 是:Array(0 =&gt; Array(0 =&gt; UsernameOne), 1 =&gt; Array(0 =&gt; UsernameTwo))。所以$array[$i]Array(0 =&gt; Username)$array[$i][0]Username
  • 我明白了,2d。好的,谢谢:)
【解决方案3】:

像这样尝试mysqli(代码用注释描述):

    $host="localhost"; // Host name 
    $username="root"; // Mysql username 
    $password=""; // Mysql password 
    $db_name="comproject"; // Database name 
    $tbl_name="members"; // Table name 

    // Connect to server and select databse.
    $mysqli = new mysqli("$host", "$username", "$password");
   //check connect error
    if (mysqli_connect_errno()) {
        printf("Connection failed: %s", mysqli_connect_error());
        exit();
    }


   // run query 
    $result = $mysqli->query("SELECT username FROM members ORDER BY username ASC");
//fetch data
    while($row = $result->fetch_array())
    {
       echo $row['username']."<br />";
    }


    /* free result set */
    $result->close();

    /* close connection */
    $mysqli->close();

【讨论】:

  • 这看起来比我想象的要复杂得多,我认为大多数情况下您可以将 my_sql 更改为 my_sqli?
  • @Shard :你这么认为吗?如果您理解它并且您还想在 mysqli 中进行转换,那么它比您现有的代码要容易得多。所以我发布了这个答案。
  • 是的,我同意所有这些,我只是认为 mysql 和 mysqli 之间的跳跃很小
【解决方案4】:

.而不是+连接字符串:

echo $array[$i]."<br/>";

【讨论】:

  • 谢谢,尽管阅读其他答案的评论 :)
猜你喜欢
  • 1970-01-01
  • 2016-04-05
  • 2021-02-26
  • 2020-04-17
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 2013-01-10
  • 1970-01-01
相关资源
最近更新 更多