我很好奇为什么这段代码能正常工作:
function updateRecord($idFieldName, $recordID, $fieldName, $recordValue){
$dbConnection=$this->dbConnect();
$updated=false;
while (!$updated){
$query=$dbConnection->prepare("UPDATE $this->table SET $fieldName = :recordValue WHERE $idFieldName = :recordID");
$query->bindParam(":recordValue", $recordValue);
$query->bindParam(":recordID", $recordID);
$updated=$query->execute();
}
}
虽然这个没有:
function updateRecord($idFieldName, $recordID, $fieldName, $recordValue){
$dbConnection=$this->dbConnect();
$updated=false;
while (!$updated){
$query=$dbConnection->prepare("UPDATE $this->table SET :fieldName = :recordValue WHERE $idFieldName = :recordID");
$query->bindParam(":fieldName", $fieldName);
$query->bindParam(":recordValue", $recordValue);
$query->bindParam(":recordID", $recordID);
$updated=$query->execute();
}
}
我不明白哪些参数可以绑定在查询语句之外,哪些参数必须直接包含在语句中。
答案 0 :(得分:1)
您can't use dynamic column names as data parameters in PDO(也不在任何其他PHP SQL库AFAIK中)。
您必须将列名直接插入字符串中。要避免SQL注入,应将列名与现有有效列名列表进行比较。