当param已知字符串

时间:2015-09-29 14:16:57

标签: php mariadb

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

  

错误消息:注意:/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。

有谁能帮我看看我做错了什么?

感谢您的帮助,

查尔斯

1 个答案:

答案 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 );