如何将 prepare() 与动态列名一起使用?
How to use prepare() with dynamic column names?
我有一个函数将 sql table 列名称字符串作为参数,returns 1 个字符串结果:
function myFunction($column_name) {
return $wpdb->get_var($wpdb->prepare("SELECT %s FROM myTable WHERE user_id=%s", $column_name, $current_user->user_login));
}
但是,这段代码不起作用,因为准备的性质,我不能为列名(和 table 名称)使用变量。
这可行,但我认为它会带来安全问题:
return $wpdb->get_var('SELECT ' . $column_name . ' FROM myTable WHERE user_id=' . $current_user->user_login);
我需要做什么才能在准备语句中使用动态列名?
您可以改用 "approved" 值的列表,这样您就不会真正在查询中使用用户数据。像这样:
$Approved = array ('firstname', 'lastname', 'birthdate') ;
$Location = array_search($ColumnName, $Approved) // Returns approved column location as int
if($Location !== FALSE) {
// Use the value from Approved using $Location as a key
$Query = $wpdb->Prepare('SELECT ' . $Approved[$Location] . ' FROM myTable WHERE user_id=:userid');
$Query->Execute(array(
:userid => $current_user->user_login
));
return $Query;
} else {
return false;
}
获取用户数据的所有 (SELECT * 或 SELECT a,b,c,d) 并将其保存到会话中以备后用可能更容易?
我有一个函数将 sql table 列名称字符串作为参数,returns 1 个字符串结果:
function myFunction($column_name) {
return $wpdb->get_var($wpdb->prepare("SELECT %s FROM myTable WHERE user_id=%s", $column_name, $current_user->user_login));
}
但是,这段代码不起作用,因为准备的性质,我不能为列名(和 table 名称)使用变量。
这可行,但我认为它会带来安全问题:
return $wpdb->get_var('SELECT ' . $column_name . ' FROM myTable WHERE user_id=' . $current_user->user_login);
我需要做什么才能在准备语句中使用动态列名?
您可以改用 "approved" 值的列表,这样您就不会真正在查询中使用用户数据。像这样:
$Approved = array ('firstname', 'lastname', 'birthdate') ;
$Location = array_search($ColumnName, $Approved) // Returns approved column location as int
if($Location !== FALSE) {
// Use the value from Approved using $Location as a key
$Query = $wpdb->Prepare('SELECT ' . $Approved[$Location] . ' FROM myTable WHERE user_id=:userid');
$Query->Execute(array(
:userid => $current_user->user_login
));
return $Query;
} else {
return false;
}
获取用户数据的所有 (SELECT * 或 SELECT a,b,c,d) 并将其保存到会话中以备后用可能更容易?