簡體   English   中英

PDO刪除不起作用並且不會引發錯誤(添加base64時)

[英]PDO delete is not working and not throwing errors (when adding base64)

我需要通過PDO從表中刪除一條記錄。 我做了一些代碼(與下面的代碼相同,但沒有base64編碼),並且可以正常工作。 然后,在數據庫和發送給MySQL的參數上添加了base64_encoding。 由於各種原因需要這樣做,因此我無法放棄base64編碼。 不幸的是,它破壞了它(數據庫中什么也沒有發生)。 我不知道如何調試它,因為查詢不會引發錯誤。 我按照本指南嘗試對其進行調試,但沒有任何錯誤或記錄錯誤。 有誰知道base64格式(例如:'siecX ==')通常會在MySQL或PDO中引起問題? 我的代碼:

<?php
$dbname="dbname";
$table="whitelisted_parameters";
session_start();
include_once(dirname(__DIR__)."../../config/database_conf.php");
try {
  $conn = new PDO("mysql:host=$hostname; dbname=$dbname", $username, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  $sql= "DELETE FROM $table WHERE virtual_host_id=:id_virtual_host_selected AND `page`=:page AND `parameter`=:parameter AND `method`=:method";
  $stmt = $conn->prepare($sql);
  $stmt->bindParam(":id_virtual_host_selected", $_SESSION['id_virtual_host_selected'], PDO::PARAM_INT);
  $fap=base64_encode($_POST['page']);
  echo $fap."||";// I used a temp value to log the variables
  $stmt->bindParam(":page", $fap, PDO::PARAM_STR);
  $fap=base64_encode($_POST['parameter']);
  echo $fap."||";
  $stmt->bindParam(":parameter", $fap, PDO::PARAM_STR);
  $fap=base64_encode($_POST['method']);
  echo $fap."||";
  $stmt->bindParam(":method", $fap, PDO::PARAM_STR);
  $stmt->execute();
      // Close DB connection
        $dbh = null;
        echo "parameter is removed";
    }
      catch(PDOException $e)
    {
      echo $e->getMessage();
    }
?>

您混淆bindParambindValue調用。

在前者中,使用對變量的引用,而在后者中,使用值本身。

通過查看它們的用法語法,這將更加清楚:

public bool PDOStatement::bindValue ( mixed $parameter , mixed $value [, int $data_type = PDO::PARAM_STR ] )

public bool PDOStatement::bindParam ( mixed $parameter , mixed &$variable [, int $data_type = PDO::PARAM_STR [, int $length [, mixed $driver_options ]]] )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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