PHP 当参数为已知字符串时,数组到字符串的转换错误

PHP Array to string conversion error when param is known string

我真的被这个错误难住了。我已经在 SO 上阅读了许多关于此错误的其他 post,但其中 none 似乎解决了我的问题。我做了几个测试,它们都将值显示为字符串。我会 post 整个代码,希望能得到一些帮助。

Error Message: Notice: Array to string conversion in /home/u645944288/public_html/Scripts/PHP/Class/TEST/Board.class.php on line 48

数组

Class代码:

<?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()));

2 项可能有帮助的事情:

我不知道 "Posts" 或 "Username" 是否是保留字,但最好在 table 和列名上使用反引号:

"SELECT * FROM `Posts` WHERE `Username` = :Username"

此外,如果将此行放在查询上方的某处,您会收到更好的错误消息。

$this->Connect->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );