我真的很难过这个错误。我已经阅读了很多关于此错误的其他帖子,但它们似乎都没有解决我的问题。我做了几个测试,他们都将值显示为字符串。我会发布整个代码,希望得到一些帮助。
错误消息:注意:/home/u645944288/public_html/Scripts/PHP/Class/TEST/Board.class.php中的数组到字符串转换 第48行
阵列
课程代码:
<?php
error_reporting(E_ALL | E_STRICT);
Class Board {
public $Connect;
public $Poster;
public $PostTo;
public $Post;
public $PostedDate;
public $Poster2;
public $PostTo2;
public $Post2;
public $Rows;
public function __construct($PostToID) {
try {
$this->Connect = new pdo("mysql:host=wwwww;dbname=xxxxx", "yyyyy", "zzzzz");
} catch (PDOException $ex) {
die(json_encode(array('outcome' => false, 'message' => 'Unable to connect')));
}
$query = $this->Connect->prepare("SELECT Username FROM Users WHERE ID = :ID");
$query->bindValue(":ID", $PostToID);
$query->execute() or die($query->ErrorInfo());
$Row = $query->fetch();
$this->PostTo = $Row['Username'];
}
public function DisplayPosts() {
$query = $this->Connect->prepare("SELECT * FROM Posts WHERE Username = :Username");
$query->bindParam(':Username', $this->PostTo);
if (is_array($this->PostTo)) {
echo('$this->PostTo is an array<br>' . PHP_EOL);
} else {
echo('$this->PostTo is NOT an array<br>' . PHP_EOL);
}
var_dump($this->PostTo);
echo('<br>' . PHP_EOL);
echo('Before $query->execute() - Username: ' . $this->PostTo . '<br>' . PHP_EOL);
$query->execute() or die($query->ErrorInfo());
echo('After $query->execute()<br>' . PHP_EOL);
$this->Rows = $query->fetchAll(PDO::FETCH_ASSOC);
foreach ($this->Rows as $data) {
foreach ($data as $key => $value) {
echo("key: $key - value: $value<br>" . PHP_EOL);
}
}
}
}
?>
is_array和var_dump()的结果
$this->PostTo
不是数组
string(9) "Masonh928"
在$ query-&gt; execute()之前 - 用户名:Masonh928
第48行是:$query->execute() or die($query->ErrorInfo());
,它位于Before和After echo命令之间。脚本此时停止,因此永远不会显示After echo。
有谁能帮我看看我做错了什么?
感谢您的帮助,
查尔斯
答案 0 :(得分:1)
与评论中提到的人一样,字符串转换来自错误。您的查询失败并尝试将错误数组转换为字符串。试试这个。
$query->execute() or die(print_r($query->ErrorInfo()));
可能会有所帮助的两件事:
我不知道&#34;帖子&#34;或&#34;用户名&#34;是保留字还是不保留字,但在表和列名称上使用反引号是一种好习惯:
"SELECT * FROM `Posts` WHERE `Username` = :Username"
此外,如果您将此行置于某个地方的查询位置,您将收到更好的错误消息。
$this->Connect->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );