Php SQL查询返回的行长度为';这不是第56行

Php SQL查询返回的行长度为';这不是第56行,php,mysql,Php,Mysql,我有返回给定列表中所有项目的代码,如下所示: function get_items($wl_id){ global $db; // Get all for this list return $db->get_rows('SELECT * FROM wl_items WHERE wl_id = ? ORDER BY priority ASC,date_mod DESC',[$wl_id]); } 它是一个诊断页面,因此除了查询

我有返回给定列表中所有项目的代码,如下所示:

    function get_items($wl_id){
        global $db;
        // Get all for this list
        return $db->get_rows('SELECT * FROM wl_items WHERE wl_id = ? ORDER BY priority ASC,date_mod DESC',[$wl_id]);
    }
它是一个诊断页面,因此除了查询结果的JSON输出外,它没有任何值。它将所有行作为给定愿望列表id的行数组(列数组)进行抓取。如果我输入54、55或57,而不是56,它就会工作。我反复检查代码,不管我做什么,结果都是空白的。当我输入一个不存在的id时,我至少会得到一个[]空数组返回

但不知怎的,在56岁时,我什么也得不到。什么都没有。只是一张空白页

如果我一路上把车倒了,我会看到我所期望的一切。我看到id的值为56或其他任何值,我看到查询按预期填充。如果我在数据库上手动运行查询,一切正常

为了防止数据库中的特定行有什么奇怪的地方,我手动更改了每一列中的值(ID除外),以确保。如果我看一下应该归还的具体物品,没有什么不寻常的

我不知道下一步该怎么办。它如何能完美地适用于任何数字,除了“TEH LULZ”中的少数数字?它与其他一些数字(例如151)有这种奇怪的行为,但我不知道是什么导致了它

当我向它发送密钥时,它应该返回属于该列表的所有项目。确实如此;完美无瑕-如果我手动运行查询,或者当它不是56(或114或91)时

这是我用来触摸db类中的db的代码:

        public function exec($query,$params_arr=[])
        {
            // Nonsense causes problems (and isn't readable)
            $query = preg_replace("/[\r\n\t]/",' ',$query);
            $query = preg_replace('/\s+/', ' ', $query);

            $this->err = null;
            $this->sth = $this->dbh->prepare($query);
            try {
                $this->sth->execute($params_arr);
                $this->last_query = $this->sql_debug($query,$params_arr);
                $_SESSION['diag'][] = $this->last_query;
            } 
            catch (Exception $e) {
                $this->err = $e->getMessage();
                return 0;
            }
            return 1;
        }
    
        public function get_rows($query,$params_arr=[])
        {
            $result = $this->exec($query,$params_arr);
            return $this->sth->fetchAll(PDO::FETCH_ASSOC);
        }
我想再次强调,这段代码在其他方面都能完美地工作。页面加载,获取数据,根据使用的id,在这一次查询中失败

还要注意的是,这在我的本地系统上可以完美地工作,只在实时服务器上出现故障

为了尽可能消除这种情况,我在一个新的PDO实例中手动连接到DB,如下所示:

        $dbh = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME,DB_USER,DB_PASS);
        if (!$sth = $dbh->prepare("SELECT * FROM wl_items WHERE wl_id=56 ORDER BY priority ASC,date_mod DESC"))
            echo "failed";
        echo $wl_id;
        $sth->execute();
    //  $sth->execute([''+$wl_id]);
        output($sth->fetchAll(PDO::FETCH_ASSOC));
============================================================明白了

这是我的输出函数。它使用“json_encode”进行转换,这显然讨厌某些特殊字符。我找到了一个翻译函数来运行我的结果,以防止出现问题:


看起来我在上面发布了解决方案,但最好是在答案中正式发布。。。事实证明,我对返回的输入使用了JSON decode或其他类似的函数。如果用户从这里粘贴文本并包含unicode字符,显然json_解码将失效。因此,所发生的情况是,包含这些字符的某些行将导致解码失败,因此该行的结果为空。

是否可能存在id为的空格(或其他空格。。。可以尝试在
$wl\u id
上使用
trim()