首页 > 解决方案 > MySQL Medoo 强制数据类型

问题描述

我目前正在尝试以特定顺序从我的 MySQL 数据库中获取行。

因此,我发现这样的查询很有用:

SELECT * FROM tbl_items WHERE id IN (130,129) ORDER BY FIELD(ID, 130,129)

当我直接在 MySQL 中运行它时,一切正常。

现在在 PHP 中,我使用数据库框架Medoo

我在那里做的是运行这个查询:

$asservate = $database->query("SELECT * 
                                FROM tbl_items 
                                WHERE ID in (:ids) 
                                ORDER BY FIELD(ID,:ids)",
                            [":ids" => intval($items)])
                        ->fetchAll();

当我回显上次执行的查询时,此查询的结果如下:

SELECT * FROM tbl_items WHERE ID in ('129,130') ORDER BY FIELD(ID,'129,130')

所以这些值是作为字符串输入的,这似乎是问题所在。结果是,我只返回了第 129 行,没有其他的。

有什么想法可以强制 medoo 不输入值,'或者如何强制 MySQL 仍然执行查询,即使'有?

提前致谢!

编辑:

这是queryMedoo 的 -function 的代码:

public function query($query, $map = [])
{
    if (!empty($map))
    {
        foreach ($map as $key => $value)
        {
            switch (gettype($value))
            {
                case 'NULL':
                    $map[ $key ] = [null, PDO::PARAM_NULL];
                    break;

                case 'resource':
                    $map[ $key ] = [$value, PDO::PARAM_LOB];
                    break;

                case 'boolean':
                    $map[ $key ] = [($value ? '1' : '0'), PDO::PARAM_BOOL];
                    break;

                case 'integer':
                case 'double':
                    $map[ $key ] = [$value, PDO::PARAM_INT];
                    break;

                case 'string':
                    $map[ $key ] = [$value, PDO::PARAM_STR];
                    break;
            }
        }
    }

    return $this->exec($query, $map);
}

标签: phpmysqlsqlprepared-statementmedoo

解决方案


推荐阅读