PHP中的PDO - 我可以在查询之外绑定哪些参数

时间:2012-01-31 22:18:42

标签: php pdo

我很好奇为什么这段代码能正常工作:

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();
            }
        }

我不明白哪些参数可以绑定在查询语句之外,哪些参数必须直接包含在语句中。

1 个答案:

答案 0 :(得分:1)

can't use dynamic column names as data parameters in PDO(也不在任何其他PHP SQL库AFAIK中)。

您必须将列名直接插入字符串中。要避免SQL注入,应将列名与现有有效列名列表进行比较。