我真的被这个错误难住了。我已经阅读了关于此错误的许多其他帖子,但它们似乎都没有解决我的问题。我做了几个测试,它们都将值显示为字符串。我将发布整个代码,希望能得到一些帮助。
Error Message: Notice: Array to string conversion in /home/u645944288/public_html/Scripts/PHP/Class/TEST/Board.class.php on line 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->execute() 之前 - 用户名:Masonh928
第 48 行是:$query->execute() or die($query->ErrorInfo());
,它在 Before 和 After echo 命令之间。脚本在此时停止,因此 After echo 永远不会显示。
谁能帮我看看我做错了什么?
感谢所有的帮助,
查尔斯
最佳答案
就像评论中提到的那样,字符串转换来自错误。您的查询失败并试图将错误数组转换为字符串。试试这个。
$query->execute() or die(print_r($query->ErrorInfo()));
可能有帮助的两件事:
我不知道“帖子”或“用户名”是否是保留字,但在表名和列名上使用反引号是个好习惯:
"SELECT * FROM `Posts` WHERE `Username` = :Username"
此外,如果将此行放在查询上方的某处,您将获得更好的错误消息。
$this->Connect->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
关于当参数为已知字符串时,PHP 数组到字符串的转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32846345/