簡體   English   中英

使用PDO更新PHP

[英]Php Update using PDO

我試圖建立一個自定義類來管理數據庫的操作。 我是OOP的初學者,所以如果您有任何建議請告訴我。 順便說一下,我有一個更新方法,該方法將表的名稱,要更新的字段,要用來更新字段的值以及要放在查詢的where子句中的字段和值作為參數。 目前,我有兩個不同的數組,一個用於設置部分,一個用於where部分。 我像這樣構建查詢字符串PDOStatement Object ( [queryString] => UPDATE Ordini SET Nome=':Nome', Cognome=': Cognome', Telefono=': Telefono' WHERE ID=':ID' )

現在,我想將參數綁定到變量並執行查詢,這就是問題所在。 我嘗試這種方式,但查詢不會更新字段。 -在$ values中,我具有要綁定到SET部分中的變量的值-在$ wv中,我具有要綁定到WHERE部分中的變量的值-在$ fieldsQuery中,我具有SET部分的占位符(“ :例如“ Nome”)-在$ fieldsWhere中,我有WHERE部分的占位符

如何以正確的方式將占位符與變量綁定?

public function update($table=NULL, $fieldsQuery=NULL, $fieldsValues = NULL, $whereFields=NULL, $whereValues=NULL, $whereOperators = NULL)
{
    if($fieldsQuery != NULL)
        $fields = explode(",", $fieldsQuery);
    if($fieldsValues != NULL)
        $values = explode(",", $fieldsValues);
    if($whereFields != NULL)
        $wf = explode(",", $whereFields);
    if($whereValues != NULL)
        $wv = explode(",", $whereValues);

    $fieldsQuery = array_map(function($field) { return ":$field";}, $fields);
    $bindValuesSet = array_combine($fieldsQuery, $values);
    //return an array in which every field is => Fieldname=':Fieldname' 
    $bindSetInitial = array_combine($fields, $fieldsQuery);


    //transform every item in array from field to :field
    $fieldsWhere = array_map(function($field) { return ":$field";}, $wf);
    $bindValuesWhere = array_combine($fieldsWhere, $wv);
    $bindWhereInitial = array_combine($wf, $fieldsWhere);

    //implode an array mantaining both key and value
    $fieldsValues = implode(', ', array_map(function ($v, $k) { return sprintf("%s='%s'", $k, $v); }, $bindSetInitial, array_keys($bindSetInitial)));
    $fieldsWhere = implode(', ', array_map(function ($v, $k) { return sprintf("%s='%s'", $k, $v); }, $bindWhereInitial, array_keys($bindWhereInitial)));

    $query = $this->db->prepare('UPDATE ' . $table . ' SET ' . $fieldsValues . ' WHERE ' . $fieldsWhere);

    $query->bindParam(':Nome', $values[0]);
    $query->bindParam(':Cognome', $values[1]);
    $query->bindParam(':Telefono', $values[2]);
    $query->bindParam(':ID', $wv[0], PDO::PARAM_INT);

    $query->execute();
    print_r($query->debugDumpParams());
}

':Nome'不是准備好的語句的占位符。 只是一個字符串':Nome'

占位符是:Nome (沒有`),並且沒有任何空格,制表符等。即: Nome 也不是占位符

因此,您的查詢應為:

UPDATE Ordini SET Nome=:Nome, Cognome=:Cognome, Telefono=:Telefono WHERE ID=:ID

還要感謝@ Fred-ii--閱讀PDO的錯誤處理部分

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM