【问题标题】:php mysql PDO updatephp mysql PDO 更新
【发布时间】:2018-01-09 04:20:49
【问题描述】:

我正在尝试使用以下代码更新 MySQL 行。这不起作用,值保持不变。我哪里错了?我做了“?”的类比。其他情况的格式不准确:

$fname_upd=$_POST['fname'];

$lname_upd=$_POST['lname'];

$email_upd=$_POST['email'];

include('connection.php');

$q_ins="UPDATE myguests SET (firstname, lastname,email) VALUES(?,?,?) WHERE id=?"; 
$ins=$dbh->prepare($q_ins);

$res=$ins->execute(array($fname_upd,$lname_upd,$email_upd,$id));

print_r($res);

【问题讨论】:

    标签: php mysqli pdo


    【解决方案1】:

    你写错了查询。 以下是更正后的查询:

    $q_ins="UPDATE myguests SET firstname=?, lastname=?,email=? WHERE id=?"; 
    $ins=$dbh->prepare($q_ins);
    

    阅读 php PDO 手册。

    【讨论】:

      【解决方案2】:

      请检查更新后的代码,但请告诉我您在哪里定义了 $id 变量,因为它是我们更新值的基础变量。

      我做了什么?

      我已经使用占位符值更新了您的更新查询,并且还使用 isset() 函数来检查我们的 $_POST 值。

      <?php
      
      $fname_upd = isset($_POST['fname']) ? $_POST['fname'] : '';
      
      $lname_upd = isset($_POST['lname']) ? $_POST['lname'] : "";
      
      $email_upd = isset($_POST['email']) ? $_POST['email'] : "";
      
      include('connection.php');
      
      $sql = "UPDATE myguests SET firstname = :firstname, lastname = :lastname, email = :email WHERE id = :id";
      
      $stmt = $dbh->prepare($sql);
      
      $stmt->bindParam(':firstname', $fname_upd, PDO::PARAM_STR);
      $stmt->bindParam(':lastname', $lname_upd, PDO::PARAM_STR);
      $stmt->bindParam(':email', $email_upd, PDO::PARAM_STR);
      $stmt->bindParam(':id', $id, PDO::PARAM_INT);
      $stmt->execute();
      

      而且您还需要更新您使用的语法,因为它没有正确使用,我已更新为

       <?php
      
          $fname_upd = isset($_POST['fname']) ? $_POST['fname'] : '';
      
          $lname_upd = isset($_POST['lname']) ? $_POST['lname'] : "";
      
          $email_upd = isset($_POST['email']) ? $_POST['email'] : "";
      
          include('connection.php');
      
          $q_ins = "UPDATE myguests SET firstname=?, lastname=?,email=? WHERE id=?";
          $ins = $dbh->prepare($q_ins);
      
          $res = $ins->execute(array($fname_upd, $lname_upd, $email_upd, $id));
          print_r($res);
      

      【讨论】:

        【解决方案3】:

        我不确定execute() 对它的论点有什么作用。如果您想保留? 语法,您可以使用准备好的语句在执行前执行bind parameters。所以你的代码看起来更像。

        $q_ins="UPDATE myguests SET (firstname, lastname, email) VALUES(?,?,?) WHERE id=?"; 
        $ins=$dbh->prepare($q_ins);
        $ins->bind_param('ssss', $fname_upd, $lname_upd, $email_upd, $id);
        $res=$ins->execute();
        

        bind_params() 的第一个参数告诉准备好的语句期望什么类型。您可能希望将$id's' 更改为'i',具体取决于$id 的定义方式,但根据我的经验,这实际上并不重要。

        【讨论】:

          猜你喜欢
          • 2014-03-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-21
          • 1970-01-01
          相关资源
          最近更新 更多