The issue is that you are setting the $id
variable before it is ever created.
<?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!';
?>
I did updated your code a little bit, since some bits make no sense, such as $delfeed
being an empty string, increasing the $id
variable even though it gets overwritten, and having random curly brackets placed about. But as you can see, inside the check for if($id)
, I bind the variables there instead.
Instead of using my method, you can specify the variable $id
at the top of your document as being a value of 0; Then, after all of your prepare statement, you can use the function bindParam
instead of 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
The reason this works, is because bindParam
passes by reference at the time the query executes. See PHP bindParam Document as well as this answer.
Edit: Solution 2 Fixing Foreach Issue
<?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!';
?>