簡體   English   中英

pdo刪除不起作用

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

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