0

我正在努力在 PDO 上转换它

function SystemConfig($str)
        {
            $tmp = mysql_query("SELECT ".$str." FROM server_status LIMIT 1") or die(mysql_error());
            $tmp = mysql_fetch_assoc($tmp);
            return $tmp[$str];
        }

我试过这个:

function SystemConfig($str)
 {
global $bdd;
            $tmp = $bdd->prepare("SELECT ? FROM server_status LIMIT 1");
            $tmp->bindValue(1, $str, PDO::PARAM_INT);
            $tmp->execute();
            $tmp_res = $tmp->fetch(PDO::FETCH_ASSOC);
            return $tmp_res[$str];
        }
        ?>

但它返回'users_online'而不是值(数据库上的10000)(PS:SystemConfig('users_online');)

有人可以帮助我吗?真诚的,

4

2 回答 2

0

您只能将值参数与 PDO 绑定。您不能绑定列名、表名或其他任何内容。

您仍然必须通过连接字符串来手动构造此查询。为了让饼干的生活更加艰难,请使用白名单方法:

if(!in_array($str, array('users_online', 'users_offline', 'free_memory')) die('...')
// rest of the function.

(但请停止使用已弃用的 mysql_* 函数。改为升级到 mysqli。或者使用 PDO,但没有针对这一单个查询的参数绑定)

于 2013-08-01T05:21:55.227 回答
0
function SystemConfig($str)
{
    static $row;
    global $bdd;

    if (!$row)
    {
        $stm = $bdd->query("SELECT * FROM server_status");
        $row = $stm->fetch();
    }
    return $row[$str];
}

但最好重新组织你的表,因为只有一行的表是无稽之谈

function SystemConfig($str)
{
    global $bdd;
    $stm = $bdd->prepare("SELECT value FROM server_status WHERE param = ?");
    $stm->execute(array($str))
    return $stm->fetchColumn();
}
于 2013-08-01T05:36:31.917 回答