【问题标题】:(PHP) PDO use different querys dependent on set variables(PHP) PDO 根据设置的变量使用不同的查询
【发布时间】:2023-03-16 01:50:02
【问题描述】:

我想通过 pdo 插入数据库,但是如果没有设置一些变量,我显然不会将它们写入数据库。

例子:

$name 已设置

$surname 未设置

$query = $db->prepare("INSERT INTO customer SET name = ?");
$query->execute(array($name));

示例 2:

$name 已设置

$姓氏已设置

$query = $db->prepare("INSERT INTO customer SET name = ?, surname = ?");
$query->execute(array($name, $surname));

我将如何只用一个准备和执行来实现它?或者最聪明的实现方式是什么?

【问题讨论】:

  • 将查询构建为变量。
  • 使用 if 条件并根据 if 条件评估使用这些查询之一。
  • 请阅读INSERT语法dev.mysql.com/doc/refman/5.7/en/insert.html的手册,然后重新开始
  • 从技术上讲,您这里缺少报价("INSERT INTO customer SET name = ?, surname = ?)
  • @RiggsFolly 我没有看到你的问题,这是一个有效的插入查询示例

标签: php mysql pdo prepare


【解决方案1】:

您可以使用 if 条件来检查变量是否已设置

if(isset($name))
{
 if(isset($surname))
 {
    $query = $db->prepare("INSERT INTO customer SET name = ?, surname = ?");
    $query->execute(array($name, $surname));

 }
 else {

  $query = $db->prepare("INSERT INTO customer SET name = ?");
$query->execute(array($name));
}
}

编辑: 如果你只想要一个准备语句,你可以试试这个代码

if(isset($name))
 {
     $q="INSERT INTO customer SET name = ?";
    $arr=array($name);
    if(isset($surname))
 {
  $q="INSERT INTO customer SET name = ?, surname = ?";
  $arr[]=$surname;

}

}

$query = $db->prepare($q);
$query->execute($arr);

【讨论】:

  • 我只想写prepare和execute一次。我可以像 $query = $db->prepare($sql); 那样做吗? $query->execute(array($set_variables));并在 if isset 条件下设置 $sql 和 $set_variables?
  • 编辑看起来几乎像我想要的解决方案。我试试看,谢谢!
【解决方案2】:

如果我理解了你的问题,你想插入 surname 的值,即使它没有设置。

$db->exec('INSERT INTO `customer`(`name`,`surname`) VALUES('.$dbh->quote($name).','.$dbh->quote($surname).')');

即使它是空的,代码也会插入该值。

编辑:

如果你想得到回应,使用这个:

if($db->exec('INSERT INTO `customer`(`name`,`surname`) VALUES('.$dbh->quote($name).','.$dbh->quote($surname).')')) {
   echo 'Success';
} else { 
    echo 'fail';
} 

编辑 2:

    /* if name is not set, insert ONLY surname */
    if(!isset($name)) {
       if($db->exec('INSERT INTO `customer`(`surname`) VALUES('.$db->quote('surname').')')){
          echo 'success';
       } else {
          echo 'fail';
       }
    /* if surname is not set, insert ONLY name */
    } elseif(!isset($surname)) {
       if($db->exec('INSERT INTO `customer`(`name`) VALUES('.$db->quote('name').')')){
          echo 'success';
       } else {
          echo 'fail';
       }
    /* if both are set, insert both */
    } else {
       if($db->exec('INSERT INTO `customer`(`name`,`surname`) VALUES('.$db->quote('name').','.$db->quote('surname').')')){
          echo 'success';
       } else {
          echo 'fail';
       }
    }

【讨论】:

  • 我只想插入设置值,所以如果设置了名称但没有设置姓氏,则只设置名称。如果设置了姓名和姓氏,请同时插入。如果没有设置姓名但有姓氏,则只设置姓氏
  • @thotho - 好的,我已经更新了我的答案,结帐 > EDIT 2
【解决方案3】:

你可以试试

<?php 
if (isset($name)&&isset($surname)) {
    $query = $db->prepare("INSERT INTO customer SET name = ? , surname = ?");
    $query->execute(array($name, $surname));
}else {
    if (isset($name){
        $query = $db->prepare("INSERT INTO customer SET name = ? ");
        $query->execute(array($name));
    }else{
        $query = $db->prepare("INSERT INTO customer SET surname = ? ");
        $query->execute(array($surname));
    }
}


?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 2022-01-22
    • 2011-04-22
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 2013-03-15
    相关资源
    最近更新 更多