[英]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.