我的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返回正确的值。 我坐了4个小时。不知道出了什么问题......或者我只是失明了。
此外,我在Insert方法中使用完全相同的循环,并且一切正常。
我的代码:( sry for long code)
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;
}
}}
答案 0 :(得分:0)
使用占位符时,在准备好的查询中,'
没有用处。
像
$sql .= "$field[$i] $operator[$i] ':$field[$i]'"
应该改写为
$sql .= "$field[$i] $operator[$i] :$field[$i]"
占位符周围没有引号 - :$field[$i]
,而不是':$field[$i]'
。