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

标签 php mariadb

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

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/

相关文章:

php - JavaScript 与 PHP,通过 URL(post)操作 XML 值(元素的文本)

php - 如何检查 php 中的当前日期是否已过到期日期?

php - 自动从mysql数据库更新php代码中的数据

mysql - MySql INFORMATION_SCHEMA.COLUMNS 中的 DATA_TYPE 和 COLUMN_TYPE 有什么区别

mysql 5.5 到 mariadb 10.2.13 : 4000% increase in execution time for select

php - 如何修复错误 500

php - 升级php版本到8后,出现这个错误

mysql - 选择单个表中的数据 1 :Many relationship

mysql - Mariadb 全文匹配两列

mysql - mariadb 外键非选择性索引