【问题标题】:array to string error数组到字符串错误
【发布时间】:2018-04-13 09:35:33
【问题描述】:

我在显示.$app->reactieDoor($topic['id']); 时遇到问题,它会显示一个错误,我不知道为什么会这样!请帮我。

Ps 我是新手,所以如果我在代码中遗漏了什么,请告诉我。

有错误的行:

 echo ' laatste reactie: ' .$app->tijd_reactie($topic['id']) . ' door ' .$app->reactieDoor($topic['id']);

该错误仅在我尝试使用此部分时显示:

.$app->reactieDoor($topic['id']);

功能代码:

function reactieDoor($topicid) {
        $this->database->query("SELECT klanten.voornaam, klanten.achternaam FROM reacties 
        LEFT JOIN klanten ON klanten.id=reacties.klant_id
        WHERE reacties.topic_id=:topic_id ORDER BY create_time DESC LIMIT 1"); 

        $this->database->bind(":topic_id", $topicid);    
        $reactie = $this->database->single();

        return $reactie;

    }

我得到的错误

【问题讨论】:

  • 您是否考虑过使用 PDO? php.net/manual/en/book.pdo.php
  • @B3none 我还是找不到问题
  • 我猜 $this->database->single(); 返回一个数组(包含名字和姓氏),所以当你 return $reactie; 你返回一个数组...所以你试图在 @ 插入一个数组987654329@
  • 我明白了,我使用了var_dump,现在我看到了,有什么提示可以正确地完成它吗? @CD001

标签: php mysql sql pdo


【解决方案1】:

我猜 $this->database->single(); 返回一个数组(包含名字和姓氏),所以当你从函数中 return $reactie; 时,这是一个你试图插入到字符串中的数组......因此出现错误。

由于该数组应该包含名字和姓氏,请尝试先将其分配给 $name 变量,然后改用它。

类似:

$name = "Mysterious Stranger";
if($n = $app->reactieDoor($topic['id'])) {
    $name = "{$n['voornaam']} {$n['achternaam']}";
}

echo " laatste reactie: "
    . $app->tijd_reactie($topic['id'])
    . " door {$name}";

在函数中这样做可能会更好,如果该函数总是应该返回一个包含名称的字符串。

在这种情况下,您可以将函数改为:

function reactieDoor($topicid) {
    $this->database->query("SELECT klanten.voornaam, klanten.achternaam FROM reacties 
        LEFT JOIN klanten ON klanten.id=reacties.klant_id
        WHERE reacties.topic_id=:topic_id ORDER BY create_time DESC LIMIT 1"); 

    $this->database->bind(":topic_id", $topicid);    
    $reactie = $this->database->single();

    return $reactie ? 
        "{$reactie['voornaam']} {$reactie['achternaam']}" :
        "Mysterious Stranger";
}

【讨论】:

  • 是的,它需要始终显示 2 件事,但我不能只使用此代码吗?:echo ' laatste reactie: ' .$app->tijd_reactie($topic['id']) . ' door ' .implode($app->reactieDoor($topic['id']) );
  • ^ 只要传递给函数的id 是有效的,就应该工作 - 我会警惕将无效的 id 传递给函数并得到类似 false 的东西,这会破坏implode() 就是全部。 @thattommm
  • 我使用了您描述的功能并且效果很好,提示我应该使用哪一个? implode() 还是你的函数?利弊?
  • 使用修改后的函数的优点是它内置了一些错误捕获 - 如果由于某种原因,$reactie = $this->database->single(); 失败并给出了一些 falsey 则该函数将return Mysterious Stranger - 你总是得到一个字符串,所以你总是知道你在处理什么。但是,如果您确定原始函数将始终返回一个数组,那么离开它并在输出中使用 implode() 会更灵活(给出可以根据我的第一个示例中的要求提取名字或姓氏的选项)。
【解决方案2】:
 .$app->reactieDoor($topic['id']);

那行代码给你一个数组而不是一个结果。 尝试 var_dump 结果。

 var_dump( $app->reactieDoor($topic['id']) );

你会看到它是数组

【讨论】:

  • 我明白了,但是我该怎么做呢?
猜你喜欢
  • 1970-01-01
  • 2016-06-11
  • 1970-01-01
  • 2013-04-27
  • 1970-01-01
  • 2015-02-26
  • 2012-07-15
  • 2017-12-02
  • 2013-06-23
相关资源
最近更新 更多