将此功能转换为PDO

时间:2013-08-01 05:10:26

标签: php mysql pdo

我正在努力在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');)

有人可以帮帮我吗? 诚恳,

2 个答案:

答案 0 :(得分:0)

您只能将值参数绑定到PDO。您无法绑定列名,表名或其他任何内容。

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

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

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

答案 1 :(得分: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();
}