我目前正在尝试以特定顺序从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仍然执行查询,即使在那里有'
呢?
谢谢!
编辑:
以下是Medoo的query
功能的代码:
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);
}