我有两个3变量,用于$ sql string
#region
public void SomeMethod()
{
//...
}
#endregion
我已经像这样编码了
$bikeid = xxxxx
$st_char = column name
$st_tab = table name
就像这样
$sql = "select $st_char
from $st_tab
where bike_id like '$bike_id'";
要从我的数据库中选择数据,结果是相同的,他们可以从数据库中获取数据
我的问题是哪一个是正确的,哪一个是错的 如果没有错,哪一个更好,为什么?
由于
答案 0 :(得分:0)
使用预准备语句也可能带来性能提升。所以至少,您的查询应该如下所示:
select $st_char from $st_tab where bike_id like :bike_id
不幸的是,您无法在某些情况下使用参数,例如列名和表名。在这种情况下,您需要进行手动字符串连接,但白名单允许输入。例如:
$allowed_cols = array('col1', 'col2', 'col3');
$allowed_tables = array('t1', 't2', 't3');
if(in_array($st_char, $allowed_cols, true) && in_array($st_tab, $allowed_tables, true))
{
$query = "select $st_char from $st_tab where bike_id like :bike_id";
// perform execution here
}
else
{
// invalid or malicious input
}
您可能还希望将表/列名称包装在方括号([]
)中,以避免与任何保留关键字冲突:
$query = "select [$st_char] from [dbo].[$st_tab] where bike_id like :bike_id";