我正在努力在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');)
有人可以帮帮我吗? 诚恳,答案 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();
}