簡體   English   中英

DELETE語句的循環內的bindValue

[英]bindValue inside loop for DELETE statement

我的DELETE查詢方法有一個“小”問題。 這段代碼沒有給出任何錯誤,因此應該可以工作。 但是數據庫內部沒有任何變化,我要刪除的行仍然存在。

主要問題可能在這里:

$query = $this->conn->prepare($sql);

            foreach ($value as $row) {
                if(is_int($row)){
                    $query->bindValue(':'.$field[$k].'', $row, PDO::PARAM_INT);
                } else
                {
                    $query->bindValue(':'.$field[$k].'', $row, PDO::PARAM_STR);
                }
                $k++;
            }
        $query->execute();

該循環內部有問題。 我准備好的SQL看起來像:DELETE FROM account WHERE id =':id'看起來還不錯,我只是想綁定:id的值(如果還有更多的WHERE也會綁定它們),但是什么也沒發生。 沒有錯誤,沒有影響。 我手動檢查了foreach,$ field [$ k]和$ row返回正確的值。 我坐在上面四個小時。 不知道這是怎么回事...或者我只是盲目。

另外,我在Insert方法中使用了完全相同的循環,並且一切正常。

我的代碼:(很長的代碼很抱歉)

class Delete extends Connection{

public function deleteClause($table, $where = array()){

    if (count($where) % 3 === 0) {


            $length = count($where) / 3;

            $counter = $count = $k = 0;


            for ($i = 0; $i < $length; $i++) {


                for ($j = $count; $j < (count($where) / $length) + $count; $j++) {
                    $field[$i]    = $where[$j];
                    $j            = $j + 1;
                    $operator[$i] = $where[$j];
                    $j            = $j + 1;
                    $value[$i]    = $where[$j];
                    $counter      = $j + 1;
                }
                $count = $counter;
            }

            $sql = "DELETE FROM $table WHERE ";

            for ($i = 0; $i < $length; $i++) {
                if ($i == $length - 1) {
                    $sql .= "$field[$i] $operator[$i] ':$field[$i]'";
                } else {
                    $sql .= "$field[$i] $operator[$i] ':$field[$i]' AND ";
                }
            }
            echo $sql;
            $query = $this->conn->prepare($sql);


            foreach ($value as $row) {
                if(is_int($row)){
                    $query->bindValue(':'.$field[$k].'', $row, PDO::PARAM_INT);
                } else
                {
                    $query->bindValue(':'.$field[$k].'', $row, PDO::PARAM_STR);
                }
                $k++;
            }
            $query->execute();

        return true;
    } else {
        echo "Niepoprawna ilość argumentów funkcji";
        return false;
    }        
}}

當使用占位符,在您准備好的查詢有沒有為用'

$sql .= "$field[$i] $operator[$i] ':$field[$i]'"

應該改寫為

$sql .= "$field[$i] $operator[$i] :$field[$i]"

占位符周圍沒有引號- :$field[$i] ,而不是':$field[$i]'

暫無
暫無

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

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