[英]pdo delete not working
<?php
$db = new PDO('mysql:host=localhost;dbname=wordpress', 'root','');
//---------prepare
$delete3 = $db->prepare("DELETE FROM wp_term_relationships WHERE object_id=:id");
$delete2 = $db->prepare("DELETE FROM wp_posts WHERE ID=:id");
$delete = $db->prepare("DELETE FROM wp_postmeta WHERE post_id=:id");;
$select = $db->prepare("SELECT post_id FROM reference WHERE x_id=?");
$delete->bindParam(':id', $id, PDO::PARAM_STR);
$delete2->bindParam(':id', $id, PDO::PARAM_STR);
$delete3->bindParam(':id', $id, PDO::PARAM_STR);
//----------
echo 'conected-----';
{$delfeed = 'LOTS OF NUMBERS';}
$array = explode(',',$delfeed);
foreach($array as $deadman){
$select->execute(array($deadman));
$row = $select->Fetch(PDO::FETCH_ASSOC);
$id = $row['post_id'];
if ($id){
echo "$id"."\n";
$delete->execute();
$delete2->execute();
$delete3->execute();
}}
echo 'done!';
?>
它是一个简单的删除脚本,但不会删除, 它确实会打印正确的$ id的女巫,直到在那里工作,但删除会变成香蕉,再次检查表名,列...尝试与问号占位符一起使用bind参数,但是什么也没做更新:它卡在foreach中数组的第一项上
问题是您要在创建$id
变量之前对其进行设置。
<?php
$db = new PDO('mysql:host=localhost;dbname=wordpress', 'root','');
$delete3 = $db->prepare("DELETE FROM wp_term_relationships WHERE object_id=?");
$delete2 = $db->prepare("DELETE FROM wp_posts WHERE ID=?");
$delete = $db->prepare("DELETE FROM wp_postmeta WHERE post_id=?");
$select = $db->prepare("SELECT post_id FROM reference WHERE x_id=?");
foreach($array as $deadman){
$select->execute(array($deadman));
$row = $select->Fetch(PDO::FETCH_ASSOC);
$id = $row['post_id'];
if ($id) {
echo "$id"."\n";
$data = array($id);
$delete->execute($data);
$delete2->execute($data);
$delete3->execute($data);
}
$id++;
}
echo 'done!';
?>
我确实更新了您的代码,因为有些地方没有意义,例如$delfeed
是一个空字符串,即使覆盖了$id
变量也增加了$id
变量,并放置了随机大括号。 但是正如您所看到的,在if($id)
检查中,我将变量绑定在那里。
除了使用我的方法,您还可以在文档顶部将变量$id
指定为0值; 然后,在完成所有prepare语句之后,可以使用功能bindParam
代替bindValue
。
$id = 0;
// Prepare Statements
$delete->bindParam(':id', $id, PDO::PARAM_STR);
$delete2->bindParam(':id', $id, PDO::PARAM_STR);
$delete3->bindParam(':id', $id, PDO::PARAM_STR);
// Rest of Original Code With No Changes
之所以起作用,是因为bindParam
在查询执行时通过引用传递。 参见PHP bindParam文档以及此答案。
编辑:解决方案2解决Foreach问题
<?php
$db = new PDO('mysql:host=localhost;dbname=wordpress', 'root','');
$delete3 = $db->prepare("DELETE FROM wp_term_relationships WHERE object_id=:id");
$delete2 = $db->prepare("DELETE FROM wp_posts WHERE ID=:id");
// Had a double semicolon trailing the function. Removed one of them
$delete = $db->prepare("DELETE FROM wp_postmeta WHERE post_id=:id");
$select = $db->prepare("SELECT post_id FROM reference WHERE x_id=?");
$id = 0; // Define Variable BEFORE bindParam
$delete->bindParam(':id', $id, PDO::PARAM_STR);
$delete2->bindParam(':id', $id, PDO::PARAM_STR);
$delete3->bindParam(':id', $id, PDO::PARAM_STR);
$delfeed = ''; // Why Have Curly Braces around this?
$array = explode(',',$delfeed);
foreach($array as $deadman) {
$select->execute(array($deadman));
$row = $select->Fetch(PDO::FETCH_ASSOC);
$id = $row['post_id'];
if ($id){
echo "$id"."\n";
$delete->execute();
$delete2->execute();
$delete3->execute();
}
}
echo 'done!';
?>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.