HI我很困惑,以确定用户想要查询数据库中的哪一列。如何使用PHP PDO识别自定义sql查询中的占位符?
考虑这个查询语句:
$db->retrieve("SELECT firstname, lastname FROM records WHERE id = :id", array('id' => 1));
问题/混乱是我怎么可能,如果用户想通过不同的条件等,其中姓氏=查询确定:名字?
感谢您的未来帮助。
HI我很困惑,以确定用户想要查询数据库中的哪一列。如何使用PHP PDO识别自定义sql查询中的占位符?
考虑这个查询语句:
$db->retrieve("SELECT firstname, lastname FROM records WHERE id = :id", array('id' => 1));
问题/混乱是我怎么可能,如果用户想通过不同的条件等,其中姓氏=查询确定:名字?
感谢您的未来帮助。
下面是你可以做的一个例子。虽然这可以根据您的需要进行修改。
$queries = array(
'id' => 1,
);
$parameters = array();
$sql = " SELECT firstname, lastname FROM records WHERE ";
foreach($queries as $column => $value) {
$sql .= $column.'=:'.$column;
$parameters[":$column"] = $value; // binding parameter
}
$db->execute($parameters); // execute query with parameters
echo $sql;
print_r($parameters);
输出
SELECT firstname, lastname FROM records WHERE id=:id
和您的参数是:Array ([:id] => 1)
然后查询需要是动态的,只要确保白名单也是你列如果用户输入与它作为好。 – Ghost
你可以在没有用户输入的情况下动态生成列,并且只通过一个开关将用户输入插入到发送给它的参数中,例如:(假设输入姓氏的情况下)'$ sql。='lastname =:input';'然后绑定参数 - 用户输入的方式永远不会触及SQL本身 - 只是绑定它的参数。 – Fluffeh
@Fluffeh 因此,即使其他占位符目前没有像这样查询,我会做一个函数和绑定: $ sth-> bindParam(':id',$ id,PDO :: PARAM_INT); $ sth-> bindParam(':lastname',$ lname,PDO :: PARAM_STR); $ sth-> bindParam(':firstname',$ fname,PDO :: PARAM_STR); –