我使用函数根据两个参数$request
和$id
检索产品信息。处理请求并返回正确的数据库字段以在查询中使用。但是,信息不会被返回,但$request
作为字符串。
public function productInformation($request,$id) {
switch($request) {
case "id":
$request = "id";
break;
case "desc":
$request = "description";
break;
case "slug":
$request = "slug";
break;
case "parent":
$request = "parent";
break;
case "thumb":
$request = "thumb_url";
break;
case "image":
$request = "image_url";
break;
case "visible":
$request = "visibility";
break;
case "time":
$request = "stamp";
break;
}
$connect = new dbconnect;
$connect->query("SELECT :request FROM products WHERE id = :id");
$connect->bind(":request",$request);
$connect->bind(":id",$id);
$query = $connect->single();
return $query[$request];
}
因此,如果$request = "desc"
,return $query[$request]
会将description
作为字符串返回?我正在拨打正确的数组密钥,但我不太清楚问题是什么?
答案 0 :(得分:2)
您不能绑定列名(或表名),只能绑定数据值....即,您不能绑定$request
,因为它是列名
$connect->query(sprint("SELECT %s FROM products WHERE id = :id", $request));
$connect->bind(":id",$id);
答案 1 :(得分:1)
没有必要将:request
放在函数bind()
中,因为通过您的切换不是SQL注入的机会。因此,您可以将$request
变量仅作为字符串进行查询。而且你也不能用表创建参数。